0

我完全被一个更大系统中的错误弄糊涂了。考虑这个类(每个节点都维护一个指向其父节点的指针和一个子节点列表):

class Node:
    children = []

    def __init__(self, parent):
        self.contents = dict()
        self.parent = parent

        if parent is not None:
            print self.children
            print parent == self
            parent.children.append(self)
            print self.children

运行这个:

foo1 = Node(None)
foo2 = Node(foo1)

神秘地返回这个:

[]
False
[<__main__.Node instance at 0x10051f128>]

这有什么意义呢?为什么第二个节点的子节点不为空?也许我缺少对与 Python 如何传递引用相关的概念的基本理解。

4

1 回答 1

3

您已定义children为类变量。它由班级的所有成员共享。将声明移入__init__并将其更改为self.children = [],您将获得预期的结果。

于 2013-03-21T17:23:09.050 回答