import sys
a = 10
b = a
print sys.getrefcount(a)
b=1
print sys.getrefcount(b)
output:
22
614
我的Python解释器有问题吗?为什么这会给出像 614 这样巨大的值?
Python版本
/usr/lib/python2.7/
这是因为 CPython 内部保留了一个已创建的值为 1 的整数对象,并且内部变量指向它。
只拥有一个这样的对象是有意义的,因为它是不可变的。
同样的事情也适用于字符串文字,因为它们是不可变的编译器通常在内存中保留单个唯一的字符串并使变量指向它。
文字越独特,内部创建它的机会就越小。
>>> sys.getrefcount(1337)
3
>>> sys.getrefcount('p')
14
>>> sys.getrefcount('StackOverflow')
3
正如您在此处的内部结构中看到的,创建并缓存了一些小的整数对象以进行一些小的优化。https://github.com/python/cpython/blob/2.7/Objects/intobject.c#L74
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)