Python遍历列表对象时调用方法为何修改所有对象?求独立修改方案
问题解析与解决方案
为什么所有实例的c属性会同步变化?
你代码里的c = {}是类属性,属于a这个类本身,而非类的某个实例。当创建多个a的实例时,所有实例会共享这同一个字典对象。所以第一个实例调用addC修改c时,本质是修改了类的c属性,其他实例访问self.c时都会指向这个共享字典,自然会同步看到变化。
如何让每个实例拥有独立的c属性?
把c的初始化放到类的__init__构造方法里,让它变成实例属性,这样每个实例创建时都会生成自己独立的字典:
class a: def __init__(self): self.c = {} # 每个实例初始化时创建专属字典 def addC(self, key, error): self.c[key] = error def main(): aa = [a() for _ in range(3)] for idx, ab in enumerate(aa): ab.addC('try', idx) # 验证结果 print(aa[0].c) # {'try': 0} print(aa[1].c) # {'try': 1} print(aa[2].c) # {'try': 2} main()
这样每次调用addC时,修改的是当前实例自己的c字典,不会影响其他实例的属性。
内容的提问来源于stack exchange,提问作者EvaldasM
相关产品推荐
相关产品推荐

