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

Python类中重复引用同一对象导致属性值全为9的原因?

为什么test方法中输出的color值全部为9?

核心问题出在c_TAIL类里的dot = c_DOT()是类级属性,不是实例属性——整个c_TAIL类只会创建这一个c_DOT实例,所有对self.dot的引用,指向的都是同一个对象。

具体执行过程拆解:

  1. 初始化c_TAIL实例时,循环10次执行self.tails.append(self.dot),其实是把同一个c_DOT对象的引用重复添加了10次到tails列表里。
  2. 每次循环里的self.tails[i].color = i,本质是在修改同一个c_DOT实例的color属性:第一次设为0,第二次覆盖成1……直到第十次设为9,这是最后一次修改。
  3. 初始化时的print是在每次修改后立刻输出,所以能看到0到9的变化,但这些修改都是针对同一个对象的。等test方法执行时,遍历tails列表的所有元素,其实都是那个已经被改成9的c_DOT实例,自然全输出9。

修正方案

把dot改成实例级的,每次循环创建新的c_DOT对象,比如:

class c_TAIL:
    tails = []
    def __init__(self) -> None:
        for i in range(10):
            # 每次循环新建一个c_DOT实例,而不是复用同一个
            new_dot = c_DOT()
            new_dot.color = i
            self.tails.append(new_dot)
            print(new_dot.color)  # 输出0-9
    def test(self):
        for i in range(0, 10):
            print(self.tails[i].color)  # 输出0-9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:10:15