強制解除分配物件
即使在 Python 2 和 3 中它們的引用數不為 0,也可以強制釋放物件。
兩個版本都使用 ctypes
模組來執行此操作。
警告: 這樣做會使 Python 環境不穩定,並且在沒有回溯的情況下容易崩潰! 使用此方法也可能會引入安全問題(非常不可能)只有釋放你確定永遠不會再次引用的物件。永遠。
Python 3.x >= 3.0
import ctypes
deallocated = 12345
ctypes.pythonapi._Py_Dealloc(ctypes.py_object(deallocated))
Python 2.x >= 2.3
import ctypes, sys
deallocated = 12345
(ctypes.c_char * sys.getsizeof(deallocated)).from_address(id(deallocated))[:4] = '\x00' * 4
執行後,對現在解除分配的物件的任何引用都將導致 Python 產生未定義的行為或崩潰 - 沒有回溯。垃圾收集器可能沒有刪除該物件的原因…
如果你取消分配 None
,你會在崩潰之前收到一條特殊資訊 - Fatal Python error: deallocating None
。