为什么 __del__ dunder 方法在 vs code 和 jupyter notebook 中表现不同

why __del__ dunder method act different in vs code vs jupyter notebook

del python 中的方法 class 在不同的文本编辑器中有两种不同的输出

class test:
    def __init__(self) :
        print("init")
    def __del__(self):
        print("del")
a=test()

vs 代码中的输出:

初始化 删除 输出到 jupyter 中:

初始化

当您 运行 终端中的 Python 脚本(与 vscode 中的类似)时,在执行完最后一行后,脚本终止。当脚本终止时,将调用 class test()desctructor。在 class.

中的 __del__() 方法中定义了一个析构函数

在 Jupyter notebook 中,脚本不会终止,而是为您的下一个代码块准备就绪(apols 此处的术语可能略有偏差)。 __del__() 方法未被调用。

Python 语言参考中有明确说明。数据模型/特殊方法名称/基本定制说(强调我的):

object.del(self)

Called when the instance is about to be destroyed...
It is not guaranteed that del() methods are called for objects that still exist when the interpreter exits.

也就是说不同的环境对于__del__

的调用可能有不同的用法