2012-08-11 81 views
2

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

誰能請解釋上述行爲的區別?

回答

14

在第一個示例中,您在遍歷它時添加到列表中。它永遠不會停止,因爲你繼續讓列表更長,所以它永遠不會走到盡頭。

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

2

a[:]相當於list(a),所以在第二循環中你遍歷的a的淺拷貝並插入到原有a。由於a[:]的長度是兩個,因此它只插入兩個元素。

雖然在第一循環中,您會遍歷a ANS還插入元素a所以a繼續增加和循環永遠不會停止。