Python中的析构函数del()如何工作?
del()方法是一种析构函数方法。当一个对象被垃圾收集器回收时,会调用该方法,这发生在对该对象的所有引用都已被删除之后。
在简单的情况下,这可能会在删除变量(如del x)后立即发生,或者如果x是本地变量,则在函数结束后发生。特别地,除非存在循环引用,标准Python实现CPython将立即进行垃圾收集。
Python垃圾收集的唯一属性是它发生在所有引用都被删除之后,因此这可能不会立即发生,甚至可能根本不发生。
更重要的是,变量可能由于多种原因而存活很长时间,例如传播异常或模块内省可能使变量引用计数大于0。此外,变量可以是循环引用的一部分-启用垃圾收集的CPython会打破大多数循环,但不是所有循环,而且仅在周期性地进行。
有__del__
的有效用例:例如,如果一个对象X引用Y并在全局缓存中保留了Y引用的副本(cache[‘X -> Y’] = Y),则X.__del__
也删除缓存条目将是礼貌的。
如果您知道析构函数提供了必需的清理,您可能希望直接调用它,x.__del__()
。
更多Python相关文章,请阅读:Python 教程