Pythonの代入について
解決したいこと
Pythonにて以下の代入を行った際、Zが想定通りの結果にならないことが分かりました。
原因が分からないので教えて欲しいです。
よろしくお願いします。
発生している問題・エラー
入力
H = 5
W = 5
X = [
[2, 0, 0, 5, 1],
[1, 0, 3, 0, 0],
[0, 8, 5, 0, 2],
[4, 1, 0, 0, 6],
[0, 9, 2, 7, 0],
]
Q = 2
matrix = [[2, 2, 4, 5], [1, 1, 5, 5]]
Z = [[0] * (W + 1)] * (H + 1)
for i in range(1, H + 1):
for j in range(1, W + 1):
Z[i][j] = X[i - 1][j - 1]
print("X:", X)
print("Z:", Z)
出力結果
X: [[2, 0, 0, 5, 1],
[1, 0, 3, 0, 0],
[0, 8, 5, 0, 2],
[4, 1, 0, 0, 6],
[0, 9, 2, 7, 0]]
Z: [[0, 0, 9, 2, 7, 0],
[0, 0, 9, 2, 7, 0],
[0, 0, 9, 2, 7, 0],
[0, 0, 9, 2, 7, 0],
[0, 0, 9, 2, 7, 0],
[0, 0, 9, 2, 7, 0]]
想定していたZ
# Xの上と左が0埋めされた状態
[0, 0, 0, 0, 0, 0],
[0, 2, 0, 0, 5, 1],
[0, 1, 0, 3, 0, 0],
[0, 0, 8, 5, 0, 2],
[0, 4, 1, 0, 0, 6],
[0, 0, 9, 2, 7, 0]]
自分で試したこと
Zの初期化を以下のようにすれば想定通りになりましたが、なぜその書き方で良くなったのかも分かりません。
Z = [ [ 0 ] * (W + 1) for i in range(H + 1) ]
補足
以下の問題を解いているときに遭遇しました。
atcoder上のコードテスト環境とローカルのJupyter環境でも実行しましたが、同様の結果が出力されます。
https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_h
0