我是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 x
和del z
语句之后,Robot对象的引用计数应该达到零并随后触发__del__
方法。 ? (就在为__del__
语句触发第二个del y
方法之前)
答案 0 :(得分:2)
在交互式解释器中,最后一个表达式的结果保存为_
。此引用使Tik-Tok保持活动状态,直到在解释器中键入另一个语句。