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

Python类对象疑问:为何两个实例共享同一列表属性?

Python类默认参数导致的列表共享问题

问题原因

Python中,函数的默认参数是在函数定义阶段就创建的,而非每次调用函数时重新生成。你的Node类里,__init__方法的默认参数x = []会在类定义时创建一个空列表对象,之后每次调用Node()(不传参数时),都会复用这个同一个列表对象。所以a.x和b.x指向的是内存中的同一个列表,对其中一个做append操作,另一个也会同步看到变化。

你可以用id()函数验证这一点:

a = Node()
b = Node()
print(id(a.x))  # 输出与下方id完全相同
print(id(b.x))

解决方法

把默认参数设为None,然后在__init__方法内部判断:如果x是None,就创建一个新的空列表。这样每次调用Node()时,都会生成独立的新列表,彻底避免共享问题:

class Node:
    def __init__(self, x=None):
        self.x = x if x is not None else []

a = Node()
b = Node()
a.x.append(3)
b.x.append(5)
print(a.x)  # 输出 [3]
print(b.x)  # 输出 [5]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:07:03