如何为对象列表中的Node对象正确添加move到path属性?
问题分析与解决方案
问题根源
你遇到的问题是多个Node对象的path属性共享了同一个列表实例,导致对其中一个对象的path执行append操作时,所有对象的path都会同步更新。
具体原因
你的Node类初始化方法中,path参数默认值为None,但如果创建Node对象时:
- 没有为每个对象单独传入独立的列表作为
path; - 或者错误地让多个对象的
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
相关产品推荐
相关产品推荐

