我有matrix = [[1,2,3],[4,5,6],[7,8,9]]
和matrix2=matrix
。现在我想删除matrix2中的第一行,即matrix2.remove(matrix[0])
。
但我得到了这个
>>> matrix2.remove(matrix2[0])
>>> matrix2
[[4, 5, 6], [7, 8, 9]]
>>> matrix
[[4, 5, 6], [7, 8, 9]]
matrix
的第一行也被删除。有谁能解释一下?如何在不改变matrix2
matrix
删除第一行
答案 0 :(得分:3)
尝试:
>>> matrix = [[1,2,3],[4,5,6],[7,8,9]]
>>>
>>> # make matrix2 a (shallow) copy of matrix
>>> matrix2 = matrix[:]
>>> matrix2.remove(matrix[0])
>>> print(matrix2)
[[4, 5, 6], [7, 8, 9]]
嗯......为什么?这是因为声明matrix2 = matrix
没有"复制"值...仅表示名称 matrix2
指向与名称 matrix
完全相同的值。
要实际创建列表的(浅)副本,我们可以将其切片为matrix2 = matrix[:]
。这会创建一个名称 matrix2
,指向包含名称的所有值的新列表 matrix
答案 1 :(得分:2)
您可以使用标准库中的复制模块:
from copy import deepcopy
matrix = [[1,2,3],[4,5,6],[7,8,9]]
matrix2 = deepcopy(matrix)
matrix2.remove(matrix2[0])
matrix
[Out]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
matrix2
[Out]: [[4, 5, 6], [7, 8, 9]]
答案 2 :(得分:2)
List是可变类型,当您使用赋值运算符将其赋值给另一个变量(matrix2=matrix
)时,它只引用同一个对象,意味着两个引用变量(matrix2,matrix
)引用相同的对象。所以在这种情况下,我们需要使用copy.copy()
或copy.deepcopy()
复制实际对象,并将函数分配给另一个变量。我在这里使用copy.copy()
。
from copy import *
matrix = [[1,2,3],[4,5,6],[7,8,9]]
matrix1 = copy(matrix)
matrix1.remove(matrix1[0])
matrix
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
matrix1
[[4, 5, 6], [7, 8, 9]]