1
matrix = [[0]*1005]*1005

matrix = [[0 for _ in range(1005)] for _ in range(1005)]

前者を初期配列に使用して実行matrix[1][1] = 1すると、すべての行の2番目の列が1に設定されることがわかりました.2番目は希望どおりに実行されました。理由がわからない?

4

2 に答える 2

8

[[0] * 1005] * 10051005個のゼロを持つ配列への1005個の参照の配列を作成します。それらはすべて同じ参照であるため、1 つを変更すると他のすべてが変更されます。ただし、作業コードをこれに短縮できます。

matrix = [[0] * 1005 for _ in range(1005)]

これは、実際には、リスト乗算構文について誰かがあなたに与える唯一の警告です:)

于 2012-07-05T00:12:33.870 に答える
3

すでに述べたことを拡張するだけです

a = [[0]] * 5
print a # [[0], [0], [0], [0], [0]]
a[0][0] = 1
print a # [[1], [1], [1], [1], [1]]
于 2012-07-05T00:20:40.610 に答える