循环中a和a [:]之间的差异

时间:2012-08-11 07:06:51

标签: python for-loop

以下代码段在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

有人可以解释一下上述行为的区别吗?

2 个答案:

答案 0 :(得分:14)

在第一个示例中,您在迭代时添加到列表中。它永远不会停止,因为你继续使列表更长,所以它永远不会结束。

在第二个示例中,a[:]是列表的副本。您可以迭代副本,同时附加到原始文件就好了。

答案 1 :(得分:2)

a[:]相当于list(a),因此在第二个循环中,您将循环遍历a的浅副本并插入原始a。由于a[:]的长度为2,因此它只插入两个元素。

在第一个循环中,您正在迭代a并将元素插入a,以便a继续增加,循环永不停止。