2024-09-30 06:15:24 发布
网友
import sys a = 10 b = a print sys.getrefcount(a) b=1 print sys.getrefcount(b)
输出:
22 614
我的python解释器有什么问题吗?为什么这会产生像614这样的巨大价值?在
Python版本
/usr/lib/python2.7/
这是因为CPython在内部保留了一个已经创建的整数对象,并且内部变量指向它。 只有一个这样的对象是有意义的,因为它是不可变的。在
同样的事情也适用于字符串文本,因为它们是不可变的编译器,通常在内存中保存一个唯一的字符串并使变量指向它。在
文字越独特,内部创建的机会就越小。在
>>> sys.getrefcount(1337) 3 >>> sys.getrefcount('p') 14 >>> sys.getrefcount('StackOverflow') 3
正如您在这里的内部结构中看到的,一些小整数对象被创建并缓存以进行一些小的优化。 https://github.com/python/cpython/blob/2.7/Objects/intobject.c#L74
如果将值更改为非平凡值,则可以看到Python优化的效果(参见@Nether的答案)。例如,如果代码更改为:
from __future__ import print_function import sys a = 1012345 b = a print(sys.getrefcount(a)) b=12345678 print(sys.getrefcount(b))
输出为:
这是因为CPython在内部保留了一个已经创建的整数对象,并且内部变量指向它。 只有一个这样的对象是有意义的,因为它是不可变的。在
同样的事情也适用于字符串文本,因为它们是不可变的编译器,通常在内存中保存一个唯一的字符串并使变量指向它。在
文字越独特,内部创建的机会就越小。在
正如您在这里的内部结构中看到的,一些小整数对象被创建并缓存以进行一些小的优化。 https://github.com/python/cpython/blob/2.7/Objects/intobject.c#L74
如果将值更改为非平凡值,则可以看到Python优化的效果(参见@Nether的答案)。例如,如果代码更改为:
输出为:
^{pr2}$相关问题 更多 >
编程相关推荐