我有一个“矩阵”,然后选择一行作为“向量”,然后更改该向量中的一个元素。 然而,“矩阵”中的元素也会发生变化。为什么?
Matrix = [[1,2,3],[4,5,6],[7,8,9]]
Vector = Matrix[1]
print('Vector', Vector)
print('Matrix', Matrix)
Vector[1] = float(99)
print('Vector', Vector)
print('Matrix', Matrix)
Output:
Vector [4, 5, 6]
Matrix [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Vector [4, 99.0, 6]
Matrix [[1, 2, 3], [4, 99.0, 6], [7, 8, 9]]
我假设这段代码是用Python编写的。发生这种情况的原因是因为
Vector = Matrix[1]
正在将 Matrix
的 1 索引行的引用分配给变量 Vector
。
为了获得
Matrix[1]
的深层副本,请使用 copy.deepcopy
。尝试以下代码,看看是否出现同样的赋值问题:
import copy
Matrix = [[1,2,3],[4,5,6],[7,8,9]]
Vector = copy.deepcopy(Matrix[1])
Python 列表使用指针。代码中
Vector
和 Matrix[1]
的指针是相同的。尝试运行下面的代码来看看我的意思。
Matrix = [[1,2,3],[4,5,6],[7,8,9]]
Vector = Matrix[1]
print(id(Vector) == id(Matrix[1])) # True
Vector2 = Matrix[1].copy()
print(id(Vector2) == id(Matrix[1])) # False
有关更多详细信息,请参阅此答案:
我可以得出结论,作业
Vector = Matrix[1]
将向量设置为 Matrix[1] 的参考
您需要制作 Matrix[1] 的副本。
如果您使用 Python 进行编码,我建议您使用复制包中的深度复制。希望有帮助