2

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

上記の動作の違いを誰か説明してもらえますか?

4

2 に答える 2

14

最初の例では、リストを繰り返し処理しながらリストに追加します。あなたが行くにつれてリストを長くし続けるので、それは決して止まらないので、それは決して終わりに達することができません。

2番目の例a[:]は、リストのコピーです。オリジナルにうまく追加しながら、コピーを繰り返すことができます。

于 2012-08-11T07:08:54.333 に答える
2

a[:]はと同等list(a)であるため、2番目のループでは、の浅いコピーをループして、a元のに挿入しaます。の長さa[:]は2であるため、2つの要素のみを挿入します。

a最初のループでは、要素を挿入して繰り返し処理している間、増加し続け、ループが停止することはありませんaa

于 2012-08-11T07:20:43.280 に答える