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

修改一个TreeNode对象的children列表导致其他对象该列表同步变化

问题分析:TreeNode实例共享children列表的原因

你遇到的问题本质是类属性与实例属性的混淆,导致所有TreeNode对象共用同一个children列表。

问题根源

看你的TreeNode类定义:

class TreeNode:
    val = None
    children = []

    def __init__(self, v):
        self.val = v

这里的children = []是类属性,属于TreeNode这个类本身,而非单个实例。Python中,类属性会被所有该类的实例共享——也就是说,你创建的每一个TreeNode对象,它们的children都指向同一个列表。所以当你给任意一个节点的children添加元素时,所有节点的children都会同步变化。

而self.val是实例属性,在__init__中通过self定义,每个实例会拥有独立的val值,这也是你没遇到val共享问题的原因。

修复方法

把children改为实例属性,在__init__方法中初始化,让每个TreeNode实例拥有独立的children列表:

class TreeNode:
    def __init__(self, v):
        self.val = v
        self.children = []  # 每个实例单独初始化列表

修改后,每个TreeNode对象的children都是自己独有的列表,向其中添加元素时不会影响其他节点的children。

验证效果

运行修改后的代码,每个节点的children只会包含自己的子节点,比如节点0的children会是[节点1,节点2],节点1的children是[节点3],节点2的children是[节点4,节点5,节点6],不会再出现所有节点children列表内容一致的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:42:06