数组中的减法会影响结果

时间:2017-04-07 22:46:39

标签: python numpy subtraction

当我将一个矩阵数组保存到另一个变量中时,当我更改矩阵的值时,另一个变量的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的值也发生了变化。

1 个答案:

答案 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的更多信息。