为何第一次迭代中的对象在第二次迭代中被删除?
作者:互联网
给出以下代码:
class wat():
def __init__(self):
self.ok = "ok"
print "hi"
def __del__(self):
print "bye"
i = [1,2,3,4]
for thing in i:
print thing
hey = wat()
我得到以下输出:
1
hi
2
hi
bye
3
hi
bye
4
hi
bye
bye
看起来直到一次迭代中的对象创建之后,一次迭代中创建的对象才被销毁.这到底是怎么回事,如果是这样,为什么要这样做呢?我一直认为,一旦迭代完成,所有变量和对象都会死亡(除非其他对象引用了这些对象).
解决方法:
这很正常.每次您在hey = wat()行中运行时,都会创建一个新对象(您得到“ hi”),然后它将替换处于hey中的旧对象.然后将旧的旧文件销毁,因为没有任何东西可以引用它. (请注意,如Assignment Statements的Python文档中所述,首先会评估右侧的表达式,然后才将结果绑定到左侧的变量(因此,首先从执行wat()获得一个嗨)再见.
显然,在第一次迭代中,没有定义hey,因此您仅在1行之后得到了hi.
标签:python-2-x,iteration,python 来源: https://codeday.me/bug/20191025/1924769.html