当我将一个矩阵数组保存到另一个变量中时,当我更改矩阵的值时,另一个变量的vaule也被更改。我不知道为什么。
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = a[1,:]
print a
print b
a[1,:] = a[1,:] - a[0,:]
print a
print b
结果是
[[1 2 3]
[4 5 6]]
[4 5 6]
[[1 2 3]
[3 3 3]]
[3 3 3]
在这个脚本中,当更改时,b的值也发生了变化。
答案 0 :(得分:0)
您需要详细了解浅拷贝:
Python中的赋值语句不会复制它们创建的对象 目标和对象之间的绑定。对于收藏品 可变或包含可变项目,有时需要一份副本 可以更改一个副本而不更改另一个副本。这个模块提供 通用的浅层和深层复制操作。
浅层和深层复制之间的区别仅与之相关 复合对象(包含其他对象的对象,如列表或 类实例):
浅拷贝构造一个新的复合对象,然后(到...) 尽可能地将引用插入到找到的对象中 原本的。
- 深层复制构造一个新的复合对象,然后, 递归地,将副本插入到其中的对象中 原始
示例:
>>> lst1 = ['a','b',['ab','ba']]
>>> lst2 = lst1[:]
>>> lst2[0] = 'c'
>>> lst2[2][1] = 'd'
>>> print(lst1)
['c', 'b', ['ab', 'd']]
现在,您必须使用deepcopy
,例如:
>>>from copy import deepcopy
>>>lst1 = ['a','b',['ab','ba']]
>>>lst2 = deepcopy(lst1)
>>>lst2[2][1] = "d"
>>>lst2[0] = "c";
>>>print lst2
>>>print lst1
['c', 'b', ['ab', 'd']]
['a', 'b', ['ab', 'ba']]
您可以阅读有关Shallow and Deep Copy的更多信息。