我一直对意外的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]
我想知道,为什么原始数组也会更新,以及如何保持原样不变,因此只会对副本进行更改。欢迎任何反馈!
答案 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