Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
以下代码片段在 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']
['d','d','b','c']
对于 python 2.6.6
谁能解释一下上述行为的区别?
在第一个示例中,您在迭代列表时添加到列表中。它永远不会停止,因为你会不断地让列表变得更长,所以它永远不会走到尽头。
在第二个示例a[:]中是列表的副本。您可以在附加到原始文件的同时迭代副本。
a[:]
a[:]等效于list(a),因此在第二个循环中,您将循环遍历a并插入 original的浅表副本a。由于 的长度a[:]为 2,因此它仅插入两个元素。
list(a)
a
在第一个循环中,您正在迭代aans 并插入元素,a因此a继续增加并且循环永远不会停止。