Python语言强制释放对象

例子

即使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在崩溃前收到一条特殊消息。