int为0的ref计数器的奇怪行为

时间:2014-03-29 17:05:55

标签: python ctypes refcounting

我正在摆弄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)

为什么似乎myInt被Python引用了283次?我错过了什么吗?

感谢您的见解。

1 个答案:

答案 0 :(得分:3)

在int的CPython实现中,引用[-5; 256]是共享的。

如果你使用myInt = 257,你应该得到c_ulong(1L)的结果。

有关详细信息,请参阅此link