[英]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 x
和del z
语句之后,对Robot对象的引用计数应达到零,并随后触发__del__
方法,对吗? (就在为del y
语句触发第二个__del__
方法之前)
在交互式解释器中,最后计算出的表达式的结果另存为_
。 该引用使Tik-Tok保持活动状态,直到在解释器中键入另一条语句为止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.