1. ホーム
  2. python

2Dリストで単一の値を変更しようとするとおかしな挙動になる [duplicate]

2023-10-28 06:10:11

質問

重複の可能性があります。

Python のリストの中の予期せぬ機能

だから私はPythonに比較的新しいですし、私は2Dリストを操作するのに苦労しています。

以下は私のコードです。

data = [[None]*5]*5
data[0][0] = 'Cell A1'
print data

で、以下がその出力です(読みやすいように整形されています)。

[['Cell A1', None, None, None, None],
 ['Cell A1', None, None, None, None],
 ['Cell A1', None, None, None, None],
 ['Cell A1', None, None, None, None],
 ['Cell A1', None, None, None, None]]

なぜすべての行に値が割り振られるのですか?

どのように解決するのですか?

これは、5つの参照を持つリストを作り 同じ のリストになります。

data = [[None]*5]*5

代わりに次のようなものを使って、5つの別々のリストを作ります。

>>> data = [[None]*5 for _ in range(5)]

これで期待通りの動作をするようになりました。

>>> data[0][0] = 'Cell A1'
>>> print data
[['Cell A1', None, None, None, None],
 [None, None, None, None, None],
 [None, None, None, None, None],
 [None, None, None, None, None],
 [None, None, None, None, None]]