強制解除分配物件

即使在 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