以下代碼片段在Python產生不同的輸出:差異在一個循環
a = ['b','c']
for x in a:
a.insert(0,'d')
循環將不會終止,並且蟒殼掛起。雖然,
a = ['b','c']
for x in a[:]:
a.insert(0,'d')
print a
生成以下內容:['d','d','b','c']
爲Python 2.6.6
誰能請解釋上述行爲的區別?
以下代碼片段在Python產生不同的輸出:差異在一個循環
a = ['b','c']
for x in a:
a.insert(0,'d')
循環將不會終止,並且蟒殼掛起。雖然,
a = ['b','c']
for x in a[:]:
a.insert(0,'d')
print a
生成以下內容:['d','d','b','c']
爲Python 2.6.6
誰能請解釋上述行爲的區別?
在第一個示例中,您在遍歷它時添加到列表中。它永遠不會停止,因爲你繼續讓列表更長,所以它永遠不會走到盡頭。
在第二個示例中,a[:]
是該列表的副本。您可以迭代副本,同時附加到原始的就好了。
a[:]
相當於list(a)
,所以在第二循環中你遍歷的a
的淺拷貝並插入到原有a
。由於a[:]
的長度是兩個,因此它只插入兩個元素。
雖然在第一循環中,您會遍歷a
ANS還插入元素a
所以a
繼續增加和循環永遠不會停止。