gpt4 book ai didi

python - "sys.getrefcount()"返回值

转载 作者:太空狗 更新时间:2023-10-30 00:25:32 48 4
gpt4 key购买 nike

为什么

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 分配在一个特殊的预分配区域中以进行性能优化,我怀疑额外的两个引用与此有关。

它在 longobject.c 中实现在 CPython 中。 (更新:链接到 Python3。)我并不声称了解真正发生的事情。我认为缓存临时引用有几件事情在起作用:

print sys.getrefcount('foo1111111111111' + 'bar1111111111111') #1
print sys.getrefcount(111111111111 + 2222222222222) #2
print sys.getrefcount('foobar333333333333333333') #3

关于python - "sys.getrefcount()"返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7544395/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com