これは、質問に記載した方法で配列を作成していないためです。代わりに、あなたのように*
を使用して作成しました:この場合
>>> [[0]*3]*3
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
、すべてのネストされたリストはlist
の同じ参照]をポイントしています。
>>> [[0]*3 for _ in range(3)]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
このリストに操作の同じセットを実行するには、私が手:この問題を解決するために
>>> array = [[0]*3]*3
>>> array[0][1] = 1 # updating 0th list
>>> array
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
# ^ ^ ^all 1 indexes updated
>>> array[1][0] = 2 # updating 1st list
>>> array
[[2, 1, 0], [2, 1, 0], [2, 1, 0]]
#^ ^ ^ all 0 indexes updated
は、array
のようなあなたを作る:リスト内の任意の値を更新すると、すべてのリストの変更を反映します:
>>> array = [[0]*3 for _ in range(3)]
>>> array[0][1] = 1
>>> array
[[0, 1, 0], [0, 0, 0], [0, 0, 0]]
# ^ Only one value updated as expected
>>> array[1][0] = 2
>>> array
[[0, 1, 0], [2, 0, 0], [0, 0, 0]]
# ^again as expected
を。 – Barmar
あなたのコードは本当ですか?または、 'a = [0、0、0]'を実行してから 'array = [a、a、a]'を実行しましたか?これにより、すべての行がコピーではなく同じアレイへの参照になります。 – Barmar