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

Why does python change all instances of a class upon changing one single instance?

在下面的 python 脚本中,我使用相同的数组 s 初始化 class 的两个实例(tt1 和 tt2)的属性 v。然后,我仅将“添加”方法应用于其中一个实例,更改属性 v。但是,不仅 tt1 的 v 发生了变化,tt2 的 v 也发生了变化。此外,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]

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