2014-03-29 46 views
4

我在擺弄python的ctypes模塊以更好地理解垃圾收集器的工作原理。在翻譯的過程中,我遇到了這種奇怪的情況:參數計數器的奇怪行爲,整數爲0

>>>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次?我錯過了什麼嗎?

感謝您的見解。

+0

僅供參考,您可以通過'sys.getrefcount'以不太古怪的方式獲得refcount。 'gc'模塊還包含幾個可用於解析GC行爲的函數。 – delnan

+0

感謝您的信息! – Jokyjo

回答

3

在int的CPython實現中,對[-5; 256]是共享的。

如果您使用myInt = 257,您應該按預期得到c_ulong(1L)的結果。

有關詳細信息,請參閱此link

+0

這應該是被接受的答案。 – ebarr

+0

謝謝!現在更清楚了。 – Jokyjo

+0

很高興我能幫忙:) – haraprasadj