在下面的 python 脚本中,我用相同的数组 s 初始化了一个类(tt1 和 tt2)的两个实例的属性 v。然后我将方法“添加”仅应用于其中一个实例,更改属性 v。但是,v 不仅针对 tt1 更改,还针对 tt2 更改。此外,s 也发生了变化。如果 s 定义为标量值而不是数组(并且方法 add() 相应更改),则属性 v 仅针对 tt1 更改。为什么是这样?非常感谢您的反馈。
脚本如下:
import numpy as np
s = np.array([1,2,3])
class test_class:
def __init__(self,vv):
self.v = vv
def add(self,h,i):
aux = self.v
aux[i] += h
self.v = aux
tt1=test_class(s)
tt2=test_class(s)
tt1.add(1,0)
print('s = ', s)
print('tt1.v = ',tt1.v)
print('tt2.v = ',tt2.v)
这是输出:
s = [2 2 3]
tt1.v = [2 2 3]
tt2.v = [2 2 3]
答案 0 :(得分:0)
您只是使用引用,但数据结构的地址与您最初初始化的列表相同,请尝试使用创建另一个列表的 deepcopy,您可以独立工作。