python __del__() 中的析构函数用法

Destructor usage in python __del__()

下面会不会造成两次释放内存的问题?为什么 python3 正在销毁一个对象 什么时候已经被程序员销毁了?

class Example:

    # Initializing
    def __init__(self):
        print('object created.')

    # Deleting (Calling destructor)
    def __del__(self):
        print('Destructor called, object deleted.')


obj = Example()
obj.__del__()

输出:

object created.
Destructor called, object deleted.
Destructor called, object deleted.

通过调用__del__(),您只是在实例上调用一个方法,没有任何特殊意义。

__del__() 方法,无论是您的方法还是默认情况下都完全没有任何作用。此外,它 不是 析构函数而是终结器:

Called when the instance is about to be destroyed. This is also called a finalizer or (improperly) a destructor.

Python的内存分配完全是内部的。 Python 中唯一的 weak 保证是,如果方法 __del__() 存在,它将在对象从内存中删除之前立即调用。如果对象复活,在某些情况下它甚至可能被调用两次或三次,或者在守护线程的情况下根本不会被调用。

更多信息,请阅读documentation