Python 中的析构函数

Destructor in Python

下面是代码。我没有手动 del 对象引用,但随后也在 VScode __del__ 中被调用。但同一段代码在 Jupyter Notebook 中运行。这意味着 __del__ 不会自动调用。代码有问题吗?使困惑。 VScode 是否处理垃圾收集器(自动)?谷歌搜索了很多,但没有得到合适的答案。

class Student:
    # constructor
    def __init__(self, name):
        print('Inside Constructor')
        self.name = name
        print('Object initialized')

    def show(self):
        print('Hello, my name is', self.name)

    # destructor
    def __del__(self):
        print('Inside destructor')
        print('Object destroyed')

# create object
s1 = Student('Emma')
s2 = s1;
s3 = s1;
print("Id of S1: " , id(s1));

最好调用 __del__ 终结器方法,因为恰好在对象即将被垃圾回收时调用此方法。 (比如当对该对象的所有引用都消失时。)

在VSCode甚至当你在终端运行你的脚本时,当解释器到达文件末尾时它会终止执行和进程,因此任何对象都将被销毁。所以你可以看到这个方法被调用了。因此,即使您没有 del 显式引用对象,所有引用也会在最后消失。

另一方面,Jupyter notebook 仍然是 运行ning,而且它可能会保留对您的对象的引用以供内部工作...

在代码的最后一行放置一个简单的 input(),您可以看到 __del__ 也不会在 VScode 或终端中被调用。