解释器不会重用大型整数对象,因此您将获得两个不同的对象:
>>> a = 11111
>>> b = 11111
>>> id(a)
40351656
>>> id(b)
40351704
sys.getrefcount(11111)始终返回相同的数字,因为它测量新对象的引用计数.
对于小整数,Python总是重用相同的对象:
>>> sys.getrefcount(1)
73
通常,您只能获得一个对象的一个引用:
>>> sys.getrefcount(object())
1
但是整数被Python分配到一个特殊的前malloced区域以进行性能优化,我怀疑额外的两个引用与此有关.
编辑:我没有声称理解低级细节中发生了什么,我认为有几件事情可以缓存临时引用:
print sys.getrefcount('foo1111111111111' + 'bar1111111111111') #1
print sys.getrefcount(111111111111 + 2222222222222) #2
print sys.getrefcount('foobar333333333333333333') #3