修改一个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
相关产品推荐
相关产品推荐

