1
我想复制一个矩阵,以便更改副本中的值不会更改原始值。我明白为什么以下是不正确的:在Python中复制矩阵
matrix1 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
matrix2 = matrix1
matrix2[0][0] = 9
matrix2 # [[9, 2, 3], [1, 2, 3], [1, 2, 3]]
matrix1 # [[9, 2, 3], [1, 2, 3], [1, 2, 3]]
matrix2 is matrix1 # True
我原来的做法是这样的:
matrix1 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
matrix2 = matrix1[:][:]
matrix2[0][0] = 9
matrix2 # [[9, 2, 3], [1, 2, 3], [1, 2, 3]]
matrix1 # [[9, 2, 3], [1, 2, 3], [1, 2, 3]]
matrix2 is matrix1 # False
在第二个代码片段,matrix1
和matrix2
不引用同一个对象。 为什么呢,做matrix2
的变化仍然影响matrix1
?我的理解是,如果它们是单独的对象,那么更改一个不会改变另一个,这就是为什么切片符号适用于一维数组的原因。
'matrix1 [:] [:]'只是复制副本。它不会复制子列表。 – user2357112
在范围内(len(矩阵1))]''尝试'[matrix1 [k]是矩阵2 [k]。 –
为了进一步解释它,它使浅副本的一个**浅**副本(意味着每行中的项目仍然是相同的项目,因为它是二维的)。请参阅:https://docs.python.org/2/tutorial/introduction.html#lists – alfasin