以下代码段在Python中生成不同的输出:
a = ['b','c']
for x in a:
a.insert(0,'d')
循环不会终止,python shell会挂起。同时,
a = ['b','c']
for x in a[:]:
a.insert(0,'d')
print a
生成以下内容:['d','d','b','c']
for python 2.6.6
有人可以解释一下上述行为的区别吗?
答案 0 :(得分:14)
在第一个示例中,您在迭代时添加到列表中。它永远不会停止,因为你继续使列表更长,所以它永远不会结束。
在第二个示例中,a[:]
是列表的副本。您可以迭代副本,同时附加到原始文件就好了。
答案 1 :(得分:2)
a[:]
相当于list(a)
,因此在第二个循环中,您将循环遍历a
的浅副本并插入原始a
。由于a[:]
的长度为2,因此它只插入两个元素。
在第一个循环中,您正在迭代a
并将元素插入a
,以便a
继续增加,循环永不停止。