我想复制矩阵,以便更改副本中的值不会更改原始值。我理解为什么以下内容不正确:
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
?我理解如果它们是单独的对象,那么更改一个不会改变另一个,这是切片符号适用于一维数组的原因。
答案 0 :(得分:1)
第一个[:]
生成最外层列表的副本。第二个[:]
生成最外层列表的另一个副本。
您想要做的事情被称为"深层复制"。请查看copy
模块:https://docs.python.org/dev/library/copy.html#copy.deepcopy