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

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

我发现如果我使用前者作为初始数组,并运行matrix[1][1] = 1它将每行中的第二列设置为 1。第二列按我的意愿执行。我想不通为什么?

4

2 回答 2

8

[[0] * 1005] * 1005将创建一个包含 1005个对具有 1005 个零的数组的引用的数组。它们都是相同的参考,所以改变一个会改变所有其他的。但是,您可以将工作代码缩短为此:

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 回答