matrix = [[0]*1005]*1005
和
matrix = [[0 for _ in range(1005)] for _ in range(1005)]
我发现如果我使用前者到初始数组,并运行matrix[1][1] = 1
它会将每行中的第二列设置为 1。第二个如我所愿。我不知道为什么?
[[0] * 1005] * 1005
将创建一个包含 1005 个引用的数组,以引用具有 1005 个零的数组。它们都是相同的引用,因此更改一个将更改所有其他引用。不过,您可以将工作代码缩短为以下内容:
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]]