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