如何更改矩阵中的单个单元格?
How to change individual cells in a matrix?
我试图理解为什么 Python 中存在以下行为。
如果我做两个等价矩阵
matrix1 = [[False] * 3] * 3
matrix2 = [[False for x in range(3)] for y in range(3)]
然后我尝试让左上角的单元格等于True
。
matrix1[0][0] = True
matrix2[0][0] = True
每个数组都以不同的方式进行了更改。
matrix1 is now [[True, False, False], [True, False, False], [True, False, False]]
matrix2 is now [[True, False, False], [False, False, False], [False, False, False]]
matrix2
是我所期望的行为。为什么 matrix1
表现不同?
当您使用 []*3
时,每个元素都指向同一个对象,因此改变一个会改变另一个。您可以将其视为一种将列表中的元素相乘的方法。
当您使用 [for x in range(3)]
时,它会创建三个单独的项目。更改一项不会影响其他项。
我试图理解为什么 Python 中存在以下行为。
如果我做两个等价矩阵
matrix1 = [[False] * 3] * 3
matrix2 = [[False for x in range(3)] for y in range(3)]
然后我尝试让左上角的单元格等于True
。
matrix1[0][0] = True
matrix2[0][0] = True
每个数组都以不同的方式进行了更改。
matrix1 is now [[True, False, False], [True, False, False], [True, False, False]]
matrix2 is now [[True, False, False], [False, False, False], [False, False, False]]
matrix2
是我所期望的行为。为什么 matrix1
表现不同?
当您使用 []*3
时,每个元素都指向同一个对象,因此改变一个会改变另一个。您可以将其视为一种将列表中的元素相乘的方法。
当您使用 [for x in range(3)]
时,它会创建三个单独的项目。更改一项不会影响其他项。