2016-12-02 176 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

回答