为什么原始numpy数组在更新其副本后会更新?

时间:2016-03-19 20:35:24

标签: python arrays numpy

我一直对意外的Python行为感到困惑:当我复制我的原始numpy数组并用不同的值替换它的一些元素时,我的原始数组的相应元素也会更新。这是一个简单的测试:

>>import numpy as np
>>x = np.array([0,0,2,2])
>>x_adj = x
>>x_adj[x_adj <= 0] = 1
>>print x
>>print x_adj
  [1 1 2 2]
  [1 1 2 2]

我想知道,为什么原始数组也会更新,以及如何保持原样不变,因此只会对副本进行更改。欢迎任何反馈!

1 个答案:

答案 0 :(得分:1)

分配不是numpy中的对象的副本。您只是处理对象的引用,以制作实际数组使用的副本

x_adj = x.copy()

您可以通过id功能

轻松查看
>>> import numpy as np
>>> x = np.array([0])
>>> print id(x)
140686120123168
>>> x_adj = x
>>> print id(x_adj)
140686120123168
>>> print id(x.copy())
140685864181632