如何将类实例多次添加到列表且修改单个实例不影响其他?
解决Python列表中实例属性同步修改的问题
你当前代码的核心问题是:列表里的所有元素都是同一个myClass实例的引用。你只创建了一次a = myClass(3),循环里反复把这个同一个对象追加到列表里,所以修改任意一个位置的属性,本质都是在修改那个唯一的实例,所有元素的属性自然会同步变化。
要实现你想要的效果,只需要在每次循环时创建新的实例,而不是复用同一个对象。
修改后的代码示例
class myClass(): def __init__(self, value): self.value = value l = [] for i in range(5): # 每次循环新建一个实例,而非复用同一个a l.append(myClass(3)) l[0].value = 1 for i in l: print(i.value)
或者也可以把实例创建放在循环内的变量里:
class myClass(): def __init__(self, value): self.value = value l = [] for i in range(5): a = myClass(3) l.append(a) l[0].value = 1 for i in l: print(i.value)
运行后输出就是你期望的:
1 3 3 3 3
因为现在列表中的每个元素都是独立的myClass实例,修改第一个实例的value只会影响它自己,其他实例的属性不受影响。
内容的提问来源于stack exchange,提问作者MacoPuco
相关产品推荐
相关产品推荐

