gpt4 book ai didi

python - 为什么 sys.getrefcount 会给出巨大的值?

转载 作者:太空宇宙 更新时间:2023-11-03 14:53:57 26 4
gpt4 key购买 nike

import sys

a = 10
b = a
print sys.getrefcount(a)
b=1
print sys.getrefcount(b)

输出:

22
614

我的python解释器有问题吗?为什么这会给出像 614 这样的巨大值?

Python 版本

/usr/lib/python2.7/

最佳答案

这是因为 CPython 内部保留了一个已经创建的值为 1 的整数对象,并且内部变量指向它。只有一个这样的对象是有意义的,因为它是不可变的。

同样的事情也适用于字符串文字,因为它们是不可变的编译器通常在内存中保留一个唯一的字符串并让变量指向它。

文字越独特,在内部创建它的机会就越小。

>>> sys.getrefcount(1337)
3
>>> sys.getrefcount('p')
14
>>> sys.getrefcount('StackOverflow')
3

正如您在此处的内部结构中看到的,一些小的整数对象被创建并缓存以进行一些小的优化。 https://github.com/python/cpython/blob/2.7/Objects/intobject.c#L74

关于python - 为什么 sys.getrefcount 会给出巨大的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44096794/

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