6

重複の可能性:
Python リストの予期しない機能

Python でリストのリストを作成したいのですが、1 つの数値を変更すると複数の数値が変更されるため、どうやらうまくいきません。これはなぜですか、どうすれば修正できますか?

>>> a = [[0]*3]*4
>>> a[0][0] = 1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
4

4 に答える 4

4

Python では、への参照を[x]*n含む新しいリストを作成します。これは、が不変 (文字列、タプルなど) である場合に最適ですが、 が変更可能である場合、1 つの要素への変更がに影響し、リストのすべての要素に影響するように見えるため、かなり混乱します。nxxxx

したがって、解決策は、リスト内包表記を使用してn新しいものを作成することです。

[x for _ in xrange(n)] # we use _ here as a "dummy variable"

あなたの場合、それは次のようになります

a = [[0]*3 for _ in xrange(4)]
于 2012-10-21T02:12:04.670 に答える