强制解除分配对象

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