我有一个'矩阵',然后选择一行作为'向量',然后更改此向量中的一个元素。 但是,'矩阵中的元素'也有变化。为什么呢?
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]]
答案 0 :(得分:0)
我假设这段代码是用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])
答案 1 :(得分:0)
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
有关详细信息,请参阅此答案:
What exactly is the difference between shallow copy, deepcopy and normal assignment operation?
答案 2 :(得分:0)
我可以得出结论
Vector = Matrix[1]
将矢量设置为Matrix [1]
的参考您需要复制Matrix [1]。
如果您使用Python进行编码,我建议您使用复制包中的deepcopy。希望它有所帮助