0
私は、リストを初期化するためにPythonで[Value] * Count
表記を使用しています。たとえば、[False] * 3
の場合はリスト[False, False False]
が作成されます。私はリストのリストを初期化するために同じ表記法を使ってみました。Pythonリスト内の可変オブジェクトのID
>>>a = [[0] * 2] * 3
>>>print a
[[0, 0], [0, 0], [0, 0]]
>>>a[0][1] = 23
>>>print a
[[0, 23], [0, 23], [0, 23]]
>>>id(a[0])
139978350226680
>>>id(a[1])
139978350226680
>>>id(a[2])
139978350226680
わかりましたように、aの要素は、3つの異なるリストを参照する代わりに、3つのリストを参照しています。 1.これはなぜ起こりますか? 2.リストのリストを初期化する正しい方法は何ですか? https://stackoverflow.com/a/13382804/4716199リストに*
オペレータの行動だ
"正しい"方法は、forループまたはリストの理解を使用することです。 –
'b = [0] * 2;を実行した場合、 a = [b] * 3 '' a'は 'b'への参照を3つ含んでいるのに驚くでしょうか? –
@ PM2Ringそれは理にかなっています。私は*新しいコピーを作成しないことを知らなかった、単に参照をコピーします。ありがとう:) – Sidhant