次のコードスニペットは、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