“sys.getrefcount()” 返回值
Why does
sys.getrefcount()
对于每个大数字或简单字符串返回3吗?这意味着3个对象
驻留在程序中的某个地方吗?此外,为什么不设置x =(非常大)会
增加该对象的引用计数?这3个引用计数是否由我产生致电
getrefcount?感谢您澄清这一点。
例如:
>>> sys.getrefcount(4234234555)3
>>> sys.getrefcount("testing")
3
>>> sys.getrefcount(11111111111111111)
3
>>> x=11111111111111111
>>> sys.getrefcount(11111111111111111)
3
回答:
大整数对象不会被解释器重用,因此您将获得两个
不同的对象:
>>> 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) #2
print sys.getrefcount('foobar333333333333333333') #3
以上是 “sys.getrefcount()” 返回值 的全部内容, 来源链接: utcz.com/qa/413671.html