“交互模式”与“脚本模式”中的Python __del__方法输出

时间:2017-07-12 02:27:08

标签: python oop

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

因此,代码段代码如下:

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:如果我在“脚本模式”下运行代码,将获得以下输出:

已经创建了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

我的问题是为什么“机器人已被销毁”只在案例2(交互模式)中打印出来一次,而在案例1(脚本模式)中打印出两次? 我做了一些关于垃圾收集的研究,根据我的理解,在del xdel z语句之后,Robot对象的引用计数应该达到零并随后触发__del__方法。 ? (就在为__del__语句触发第二个del y方法之前)

1 个答案:

答案 0 :(得分:2)

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