即使仅应用于其中一个实例,方法也会更改这两个实例

时间:2017-12-21 17:06:25

标签: python python-3.x class numpy methods

我很难理解为什么我的简单代码表现得像这样。我创建了2个实例a和b,它接受一个数组作为参数。然后我定义了一个方法来更改其中一个实例数组,但后来都改变了。知道为什么会这样,我怎么能避免改变其他实例的方法呢?

import numpy as np
class Test:
  def __init__(self, arg):
    self.arg=arg


  def change(self,i,j,new):
    self.arg[i][j]=new




array=np.array([[11,12,13]])
a=Test(array)
b=Test(array)
#prints the same as expected
print(a.arg)
print(b.arg)
print()
a.change(0,0,3)
#still prints the same, even though I did 
#not change b.arg
print(a.arg)
print(b.arg)

1 个答案:

答案 0 :(得分:2)

因为您为实例成员分配了相同的对象。您可以使用np.array(x, copy=True)x.copy()生成新的数组对象:

array = np.array([[11,12,13]])
a = Test(array.copy())
b = Test(np.array(array, copy=True))

或者,如果您的arg始终是np.array,则可以使用__init__方法(注释中roganjosh注明)来执行此操作:

class Test:
    def __init__(self, arg):
        self.arg = np.array(arg, copy=True)
    ...