将子级添加到父级还会将子级添加到当前节点

时间:2019-07-10 06:15:07

标签: python

所以我刚开始学习Python,因此如果我在这里缺少任何东西,请原谅我。我有一个简单的节点类,它以数据和子代为列表。在另一个Im递归遍历网格的类中,我尝试将整个网格添加到节点以创建用于该问题的某种状态空间。我的问题是,当我将一个孩子添加到其父对象时,由于某种原因,它也会将自己添加为孩子。

这是我的节点类

class StateSpaceNode:
    def __init__(self, data=None, children=[]):
        self.data = data
        self.children = children

    def add_data(self, data):
        self.data = data

    def add_child(self, child):
        self.children.append(child)

这是我添加孩子的部分

    def traverse_dfs(self, grid, x, y, seen, root):
        self.traverse_dfs_helper(grid, x, y, seen, root)

    def traverse_dfs_helper(self, grid, x, y, seen, old_root):
        key = "%s, %s" % (x, y)
        seen[key] = True

        if old_root.data is not None:
            node = StateSpaceNode()
            print("ADDING CHILD")
            print("NEW NODE:", node)
            print("NEW NODE CHILDREN: ", node.children)
            node.add_data(copy.deepcopy(grid))
            old_root.add_child(node)
            print("PARENT CHILDREN:", old_root.children)
            print("CHILDREN TO NEW NODE:", node.children)
        else:
            print("MAKING ROOT")
            old_root.add_data(copy.deepcopy(grid))
            print("OLD ROOT DATA ADDED", old_root.data)
            node = old_root
            print("CHILDREN TO OLD ROOT", node.children)

记下打印语句。这是该部分代码的输出。

MAKING ROOT
OLD ROOT DATA ADDED [[0, 0], [0, 2]]
CHILDREN TO OLD ROOT []
ADDING CHILD
NEW NODE: <state_space.StateSpaceNode object at 0x104d2dcc0>
NEW NODE CHILDREN:  []
PARENT CHILDREN: [<state_space.StateSpaceNode object at 0x104d2dcc0>]
CHILDREN TO NEW NODE: [<state_space.StateSpaceNode object at 0x104d2dcc0>]

如果我将树打印出来,它只会与同一个孩子继续不断。但是,“添加孩子”部分总共只发生3次,因此我不确定发生了什么。任何帮助表示赞赏!

0 个答案:

没有答案