Python“uu del”方法输出在;互动模式;vs";“脚本模式”;

Python“uu del”方法输出在;互动模式;vs";“脚本模式”;,python,oop,Python,Oop,我是Python新手,前几天我遇到了Pythondel方法,我对下面代码的输出有些怀疑 因此,代码片段如下所示: class Robot(): def __init__(self, name): print(name + " has been created!") def __del__(self): print ("Robot has been destroyed") if __name__ == "__main__": x = Ro

我是Python新手,前几天我遇到了Pythondel方法,我对下面代码的输出有些怀疑

因此,代码片段如下所示:

class Robot():
    def __init__(self, name):
        print(name + " has been created!")

    def __del__(self):
        print ("Robot has been destroyed")

if __name__ == "__main__":
    x = Robot("Tik-Tok")
    y = Robot("Jenkins")
    z = x
    z
    x
    del x
    del z
    del y
案例1:如果在“脚本模式”下运行代码,将获得以下输出:

>>> x = Robot("Tik-Tok")
Tik-Tok has been created!
>>> y = Robot("Jenkins")
Jenkins has been created!
>>> z = x
>>> z
<__main__.Robot object at 0x02D7E910>
>>> x
<__main__.Robot object at 0x02D7E910>
>>> del x
>>> del z
>>> del y
Robot has been destroyed
Tik Tok已经创建! 詹金斯被创造了! 机器人被摧毁了 机器人被摧毁了

案例2:如果在“交互模式”下运行代码,将获得以下输出:

>>> x = Robot("Tik-Tok")
Tik-Tok has been created!
>>> y = Robot("Jenkins")
Jenkins has been created!
>>> z = x
>>> z
<__main__.Robot object at 0x02D7E910>
>>> x
<__main__.Robot object at 0x02D7E910>
>>> del x
>>> del z
>>> del y
Robot has been destroyed
>x=机器人(“Tik-Tok”)
Tik Tok已经创建!
>>>y=机器人(“詹金斯”)
詹金斯被创造了!
>>>z=x
>>>z
>>>x
>>>德尔克斯
>>>德尔茨
>>>德利
机器人被摧毁了
我的问题是,为什么在案例2(交互模式)中“Robot has destroming”只打印一次,而在案例1(脚本模式)中打印两次?
我对垃圾收集做了一些研究,根据我的理解,在执行
del x
del z
语句后,对Robot对象的refcount应该达到零,并随后触发
\u del\u
方法,对吗?(就在为
dely
语句触发第二个
\uuuu del\uuu
方法之前)

在交互式解释器中,最后计算的表达式的结果保存为
\uu
。此引用使Tik-Tok保持活动状态,直到在解释器中键入另一条语句。

Do.Not.Implement<代码>\uuuu del\uuuu。它几乎可以肯定是没有用的,而且很可能会导致内存泄漏。另外,缩进是怎么回事?