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

如何为对象列表中的Node对象正确添加move到path属性?

问题分析与解决方案

问题根源

你遇到的问题是多个Node对象的path属性共享了同一个列表实例,导致对其中一个对象的path执行append操作时,所有对象的path都会同步更新。

具体原因

你的Node类初始化方法中,path参数默认值为None,但如果创建Node对象时:

  1. 没有为每个对象单独传入独立的列表作为path;
  2. 或者错误地让多个对象的path指向同一个列表;
    都会导致所有对象共享同一个列表,从而出现你看到的异常结果。

另外需要注意一个常见的坑(你的代码暂未涉及):如果把__init__的path默认参数设为可变对象(比如path=[]),所有未传入path的Node对象会自动共享这个默认的空列表,也会引发同样的问题。


解决方案

方案1:修正Node类的初始化方法(推荐)

修改Node类,确保每个对象初始化时都拥有独立的path列表:

class Node:
    def __init__(self, move=None, path=None):
        self.move = move
        # 若未传入path,则初始化新的空列表,避免共享
        self.path = path if path is not None else []

这样无论创建对象时是否传入path,每个Node的path都是独立的实例。

方案2:创建对象时指定独立的path列表

如果无法修改Node类,在创建每个Node对象时,手动为其传入新的空列表:

obj1 = Node("UP", [])
obj2 = Node("DOWN", [])
obj_list = [obj1, obj2]

验证代码

使用上述任一方案后,执行简化后的循环:

for node in obj_list:
    node.path.append(node.move)

执行结果会符合预期:

  • Obj1.path = ["UP"]
  • Obj2.path = ["DOWN"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:15:34