You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打破同类别对象中列表间的关联?

解决Python类实例共享列表属性的问题

你的问题出在类属性和实例属性的区别上:

问题原因

你定义的my_values = []是Model类的类属性,所有Model的实例都会共享这个列表对象。而name之所以表现正常,是因为你通过m.name = str(i)给每个实例创建了同名的实例属性,覆盖了类属性;但my_values你只是调用append方法,操作的始终是类属性的那个列表,所以所有实例的my_values都会同步变化。

解决方案

有两种常用方法可以让每个实例拥有独立的my_values列表:

方法1:在__init__中初始化实例属性(推荐)

把属性定义移到类的构造方法里,每个实例创建时都会初始化自己的属性:

class Model:
    def __init__(self):
        self.name = ''
        self.my_values = []

models = []
for i in range(3):
    m = Model()
    m.name = str(i)
    m.my_values.append(i)
    models.append(m)

方法2:在实例中重新赋值列表(不推荐,易混淆)

如果保留类属性,在每个实例中给my_values重新赋值一个新列表,替代共享的类属性:

class Model:
    name = ''
    my_values = []

models = []
for i in range(3):
    m = Model()
    m.name = str(i)
    m.my_values = [i]  # 创建新列表,不再使用类属性的列表
    models.append(m)

验证结果

运行修改后的代码后,遍历models查看每个实例的属性:

for m in models:
    print(f"{m.name}: {m.my_values}")

输出会符合预期:

0: [0]
1: [1]
2: [2]

内容的提问来源于stack exchange,提问作者Vlad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:27:20