2

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

对于 python 2.6.6

谁能解释一下上述行为的区别?

4

2 回答 2

14

在第一个示例中,您在迭代列表时添加到列表中。它永远不会停止,因为你会不断地让列表变得更长,所以它永远不会走到尽头。

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

于 2012-08-11T07:08:54.333 回答
2

a[:]等效于list(a),因此在第二个循环中,您将循环遍历a并插入 original的浅表副本a。由于 的长度a[:]为 2,因此它仅插入两个元素。

在第一个循环中,您正在迭代aans 并插入元素,a因此a继续增加并且循环永远不会停止。

于 2012-08-11T07:20:43.280 回答