2016-12-02 137 views
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 

在第二个代码片段,matrix1matrix2不引用同一个对象。 为什么呢,做matrix2的变化仍然影响matrix1我的理解是,如果它们是单独的对象,那么更改一个不会改变另一个,这就是为什么切片符号适用于一维数组的原因。

+3

'matrix1 [:] [:]'只是复制副本。它不会复制子列表。 – user2357112

+0

在范围内(len(矩阵1))]''尝试'[matrix1 [k]是矩阵2 [k]。 –

+0

为了进一步解释它,它使浅副本的一个**浅**副本(意味着每行中的项目仍然是相同的项目,因为它是二维的)。请参阅:https://docs.python.org/2/tutorial/introduction.html#lists – alfasin

回答