重複の可能性:
Python リストの予期しない機能
Python でリストのリストを作成したいのですが、1 つの数値を変更すると複数の数値が変更されるため、どうやらうまくいきません。これはなぜですか、どうすれば修正できますか?
>>> a = [[0]*3]*4
>>> a[0][0] = 1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
重複の可能性:
Python リストの予期しない機能
Python でリストのリストを作成したいのですが、1 つの数値を変更すると複数の数値が変更されるため、どうやらうまくいきません。これはなぜですか、どうすれば修正できますか?
>>> a = [[0]*3]*4
>>> a[0][0] = 1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
Python では、への参照を[x]*n
含む新しいリストを作成します。これは、が不変 (文字列、タプルなど) である場合に最適ですが、 が変更可能である場合、1 つの要素への変更がに影響し、リストのすべての要素に影響するように見えるため、かなり混乱します。n
x
x
x
x
したがって、解決策は、リスト内包表記を使用してn
新しいものを作成することです。
[x for _ in xrange(n)] # we use _ here as a "dummy variable"
あなたの場合、それは次のようになります
a = [[0]*3 for _ in xrange(4)]