析构函数__del __()在Python中如何工作?

__del __()方法被称为析构函数方法。在删除对象的所有引用之后发生的垃圾回收对象中调用该方法。

在简单的情况下,这可能是在删除del x之类的变量之后,或者如果x是局部变量,则在函数结束之后。特别是,除非有循环引用,否则标准的Python实现CPython将立即进行垃圾收集。

Python垃圾回收的唯一属性是,它会在删除所有引用之后发生,因此这不一定在紧接之后发生,甚至根本不会发生。

甚至更是如此,例如,由于多种原因,变量可以生存很长时间。传播异常或模块自省可以使变量引用计数保持大于0。此外,变量可以是循环引用的一部分-启用垃圾回收的CPython会中断大多数(但不是全部)此类循环,甚至只是定期中断。

__del__有有效的用例:例如,如果对象X引用了Y,并且还在全局缓存中保留了Y引用的副本(cache ['X-> Y'] = Y),则对X而言这是礼貌的。 __del__也删除缓存条目。

 如果知道析构函数提供了必需的清除,则可能要直接调用x .__ del __()。