次のコードスニペットは、Pythonでさまざまな出力を生成します。
a = ['b','c']
for x in a:
a.insert(0,'d')
ループは終了せず、Pythonシェルがハングします。その間、
a = ['b','c']
for x in a[:]:
a.insert(0,'d')
print a
以下を生成します:['d','d','b','c']
Python2.6.6の場合
上記の動作の違いを誰か説明してもらえますか?
最初の例では、リストを繰り返し処理しながらリストに追加します。あなたが行くにつれてリストを長くし続けるので、それは決して止まらないので、それは決して終わりに達することができません。
2番目の例a[:]は、リストのコピーです。オリジナルにうまく追加しながら、コピーを繰り返すことができます。
a[:]はと同等list(a)であるため、2番目のループでは、の浅いコピーをループして、a元のに挿入しaます。の長さa[:]は2であるため、2つの要素のみを挿入します。
a最初のループでは、要素を挿入して繰り返し処理している間、増加し続け、ループが停止することはありませんa。a