当整数为0时,ref计数器的行为很奇怪

4

我在研究Python的ctypes模块,以更好地理解垃圾回收机制。在解释器中尝试时,我遇到了这种奇怪的情况:

>>>import ctypes
>>>def get_ref(obj):
...    """ This returns the refcount of obj as a c_size_t """
...    return ctypes.c_size_t.from_address(id(obj))
...
>>>myInt = 0
>>>get_ref(myInt)
c_ulong(283L)

为什么Python中似乎有283次引用了我的整数变量myInt?我是否漏掉了什么?感谢您的见解。

你可以通过 sys.getrefcount 方法以更少的 hacky 方式获取 refcount。gc 模块还包含多个函数,可用于分析 GC 行为。 - user395760
谢谢您提供的信息! - Jokyjo
1个回答

3
在CPython的int实现中,[-5;256]的引用是共享的。
如果你使用myInt = 257,你应该得到预期的c_ulong(1L)结果。
请参阅此链接了解详细信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接