为什么python在更改一个实例时会更改一个类的所有实例?

时间:2021-03-09 14:44:28

标签: python class attributes

在下面的 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]

1 个答案:

答案 0 :(得分:0)

您只是使用引用,但数据结构的地址与您最初初始化的列表相同,请尝试使用创建另一个列表的 deepcopy,您可以独立工作。

相关问题