matrix = [[0]*1005]*1005
と
matrix = [[0 for _ in range(1005)] for _ in range(1005)]
前者を初期配列に使用して実行matrix[1][1] = 1
すると、すべての行の2番目の列が1に設定されることがわかりました.2番目は希望どおりに実行されました。理由がわからない?
matrix = [[0]*1005]*1005
と
matrix = [[0 for _ in range(1005)] for _ in range(1005)]
前者を初期配列に使用して実行matrix[1][1] = 1
すると、すべての行の2番目の列が1に設定されることがわかりました.2番目は希望どおりに実行されました。理由がわからない?
[[0] * 1005] * 1005
1005個のゼロを持つ配列への1005個の参照の配列を作成します。それらはすべて同じ参照であるため、1 つを変更すると他のすべてが変更されます。ただし、作業コードをこれに短縮できます。
matrix = [[0] * 1005 for _ in range(1005)]
これは、実際には、リスト乗算構文について誰かがあなたに与える唯一の警告です:)
すでに述べたことを拡張するだけです
a = [[0]] * 5
print a # [[0], [0], [0], [0], [0]]
a[0][0] = 1
print a # [[1], [1], [1], [1], [1]]