Python 中的析构方法 __del__() 是如何工作的?


__del__() 方法被称为析构方法。当对象被垃圾回收时,它会被调用,而垃圾回收发生在对该对象的所有引用都被删除之后。

在一个简单的例子中,这可能是在你删除一个变量(例如 del x)之后立即发生,或者如果 x 是一个局部变量,则在函数结束之后立即发生。特别地,除非存在循环引用,否则 CPython(标准 Python 实现)将立即进行垃圾回收。

Python 垃圾回收的唯一特性是它发生在所有引用都被删除之后,因此这可能不一定会立即发生,甚至可能根本不会发生。

更重要的是,变量可能由于多种原因而存在很长时间,例如,传播的异常或模块内省可以使变量的引用计数大于 0。此外,变量可以是循环引用的一部分——CPython 在垃圾回收打开的情况下会破坏大多数(但不是全部)这样的循环,并且即使那样也只定期进行。

__del__ 有有效的用例:例如,如果对象 X 引用 Y,并且还在全局缓存中保留 Y 引用的副本(cache['X -> Y'] = Y),那么 X.__del__ 也删除缓存条目将是一种礼貌的行为。

如果你知道析构函数提供必要的清理,你可能希望直接调用它,x.__del__()。

更新于: 2019-07-30

563 次查看

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告