繁体   English   中英

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

[英]Python __del__ method output in “Interactive Mode” vs “Script Mode”

我是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已创建! Jenkins已创建! 机器人已被摧毁机器人已被摧毁

情况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 y语句触发第二个__del__方法之前)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM