首先在python 3.0手册中有这么个示例
- >>> a = ['cat', 'window', 'defenestrate']
- >>> for x in a[:]: # make a slice copy of the entire list
- ... if len(x) > 6: a.insert(0, x)
- ...
- >>> a
- ['defenestrate', 'cat', 'window', 'defenestrate']
对这段代码稍加修改我们会发现程序死掉了
- >>> for x in a:
- ... if len(x) > 6: a.insert(0, x)
- ...
程序死掉了,是由于进入一个无限循环当中。a[:]实际上是a对象的克隆,所以在示例中我们没有发生死循环,但是底面的程序是对a对象直接操作,造成不断的增加a对象的item,而for循环不断的迭代a对象,造成程序死循环。
所以在对对象操作时,我们要注意。在for中,如果要对对象操作,一般情况下应该对对象的副本进行迭代。