大整数对象不会被解释器重用,因此您将获得两个不同的对象:
>>> a = 11111>>> b = 11111>>> id(a)40351656>>> id(b)40351704
sys.getrefcount(11111)始终返回相同的数字,因为它测量的是新对象的引用计数。
对于小整数,Python始终重用同一对象:
>>> sys.getrefcount(1)73
通常,您只会获得一个对新对象的引用:
>>> sys.getrefcount(object())1
但是整数是由Python在一个特殊的预分配区域中分配的,用于性能优化,我怀疑额外的两个引用与此有关。
您可以在此处查看C的实现:http
:
//svn.python.org/view/python/trunk/Objects/intobject.c?view=markup
编辑:我并不是声称要了解底层细节中发生的事情,我认为有一些工作在缓存临时引用:
print sys.getrefcount('foo1111111111111' + 'bar1111111111111') #1print sys.getrefcount(111111111111 + 2222222222222) #2print sys.getrefcount('foobar333333333333333333') #3


