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

Python类数组行为疑惑:为何多实例共用同一数组?

问题原因与解决方法

核心问题:类属性 vs 实例属性

你定义的arr = []是类属性,它属于整个example类本身,而非类的单个实例。所有example的实例都会共享这个类属性——哪怕你用self.arr访问,只要当前实例没有自己定义同名的实例属性,Python就会自动去类的属性里找,所以本质上所有实例操作的都是同一个数组。

代码执行过程拆解

  1. 第一次实例化example()时,__init__里的self.arr.append(69)会找到类的arr,添加第一个69,此时类的arr为[69]。
  2. 第二次实例化时,同样操作,类的arr变成[69, 69]。
  3. 重复到第五次实例化后,类的arr已经累积了5个69。
  4. 遍历5个实例时,每个实例的arr都指向这个有5个元素的共享数组,所以每个实例输出5个69,最终总共输出5×5=25个。

修正方法:改为实例属性

要让每个实例拥有独立的数组,需要在__init__方法里定义实例属性self.arr,这样每个实例初始化时都会创建属于自己的数组:

class example:
    def __init__(self):
        self.arr = []  # 这里定义实例专属的数组
        self.arr.append(69)

examples = []
for i in range(5):
    examples.append(example())
for e in examples:
    for a in e.arr:
        print(str(a))

此时每个实例的arr只有1个69,遍历后会输出5个69,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:35:11