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

如何在Python中创建独立内存的新对象列表?属性共享异常排查

问题原因与解决方案

你遇到的问题核心是类属性被所有实例共享。你的代码里,_name和_words是定义在类example下的类属性,而非每个实例独有的实例属性。这意味着所有example实例共用同一个_words列表,不管哪个实例调用add_words方法,修改的都是同一份数据,导致所有实例的_words同步变化。

另外,__init__方法里的_name = name也存在错误——这只是创建了一个局部变量,并没有给实例的_name属性赋值,必须用self._name才能绑定到当前实例。

修正后的代码

将实例属性的定义移到__init__方法内,用self.前缀声明,确保每个实例拥有独立的属性空间:

class example:
    def __init__(self, name):
        self._name = name  # 实例属性:每个实例独立持有
        self._words = []   # 实例属性:每个实例初始化独立空列表

    def add_words(self, new_words):
        for i in new_words:
            self._words.append(i)

examples = [example("example_1"), example("example_2"), example("example_3")]
examples[0].add_words(["test1", "test2"])

print(examples[2]._words)  # 输出:[]

关键说明

  • 类属性:定义在类内部、方法外部的变量,属于整个类,所有实例共享同一份数据。比如你原代码中的_name = ""和_words = [],所有example实例会共用这个列表。
  • 实例属性:定义在__init__(或其他实例方法)内、以self.开头的变量,属于单个实例,每个实例都有独立的内存空间,修改自己的属性不会影响其他实例。

修正后,每个example实例都会初始化自己的_words空列表,调用add_words只会修改当前实例的列表,其他实例的_words保持初始的空列表状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:35:19