其他分享
首页 > 其他分享> > 为何第一次迭代中的对象在第二次迭代中被删除?

为何第一次迭代中的对象在第二次迭代中被删除?

作者:互联网

给出以下代码:

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