当我输入时:
>>> astrd = 123
>>> import sys
>>> sys.getrefcount(astrd)
3
>>>
我不明白 astrd
在哪里使用了 3 次?
最佳答案
被引用三次的不是astrd
,而是值123
。 astrd
只是(不可变的)数字 123 的一个名称,它可以被多次引用。除此之外,小整数通常是共享的:
>>> astrd = 123
>>> sys.getrefcount(astrd)
4
>>> j = 123
>>> sys.getrefcount(astrd)
5
在第二个赋值中,没有创建新的整数,j
只是整数 123
的新名称。
但是,给定非常大的整数,这不成立:
>>> i = 823423442583
>>> sys.getrefcount(i)
2
>>> j = 823423442583
>>> sys.getrefcount(i)
2
共享整数是 CPython(以及其他)的一个实现细节。由于小整数经常被实例化,共享它们可以节省大量内存。这是因为整数首先是不可变的。
对于第二个示例中的附加引用,请参见。 codeape's answer .
关于python - 来自 sys.getrefcount 的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/759740/