“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') #1

print sys.getrefcount(111111111111 + 2222222222222) #2

print sys.getrefcount('foobar333333333333333333') #3

以上是 “sys.getrefcount()” 返回值 的全部内容, 来源链接: utcz.com/qa/413671.html

回到顶部