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>]

これはどのように意味がありますか?2 番目のノードの子が空でないのはなぜですか? おそらく、Python が参照を渡す方法に関連する概念の基本的な理解が欠けています。

4

1 に答える 1

3

childrenクラス変数として定義しました。クラスのすべてのメンバーによって共有されます。宣言を移動して__init__に変更するとself.children = []、期待する結果が得られます。

于 2013-03-21T17:23:09.050 に答える