Python 的析构方法 __del__() 是如何工作的?
__del__() 方法被称为析构方法。当对象被垃圾回收时,它会被调用,这发生在对该对象的所有引用都被删除之后。
在一个简单的例子中,这可能发生在你删除一个变量之后,例如 del x,或者如果 x 是一个局部变量,则在函数结束之后。特别是,除非存在循环引用,否则 CPython(标准 Python 实现)将立即进行垃圾回收。
Python 垃圾回收的唯一特性是它发生在所有引用都被删除之后,所以这并不一定会在之后立即发生,甚至可能根本不会发生。
更重要的是,变量可能由于许多原因而存在很长时间,例如,传播的异常或模块自省可以使变量引用计数大于 0。此外,变量可以是循环引用的一部分——启用垃圾回收的 CPython 会破坏大多数(但不是全部)这样的循环,而且即使那样也只是周期性地进行。
__del__ 有一些有效的用例:例如,如果对象 X 引用 Y,并且还在全局缓存中保留 Y 引用的副本 (cache['X -> Y'] = Y),那么让 X.__del__ 也删除缓存条目将是很礼貌的。
如果你知道析构函数提供了必要的清理工作,你可能希望直接调用它,x.__del__()。
广告