2

我正在尝试对列表的 python 列表做一些事情,但我发现索引有些奇怪。
如果我想创建一个 2*2 的“矩阵”,我会

matrix = [[0]*2]*2   

然后,如果我想通过使用来更改第一行第一列,比如说,

matrix[0][0] = 1    

我会得到[[1,0],[1,0]],而不是[[1,0],[0,0]]。有谁知道出了什么问题?

4

1 回答 1

6

在列表上使用*运算符会创建一个浅拷贝,因此[[0]*2]*2等效于以下内容:

inner = [0, 0]
matrix = [inner, inner]

因为 中的两个位置matrix都是对同一个列表的引用,所以对其中一个的任何修改都会修改另一个。相反,请使用以下内容:

matrix = [[0]*2 for i in range(2)]
于 2013-06-03T18:38:09.900 回答