2013-02-20 78 views
1

我試圖做一個有遞歸'printAll'方法的樹。Python無限遞歸在打印所有的孩子

我的代碼是:

class Node(object): 
    def __init__(self, children=[], tag=None): 
     self.children = children 
     self.tag = tag 

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

    def getChildren(self): 
     return self.children 

    def printAll(self): 
     print self.getChildren() 
     for child in self.children: 
      child.printAll() 

當我運行它,我得到這個:「同時呼籲一個Python對象超過最大遞歸深度」。

我猜它與調用子的printAll()方法時導致無限循環時將頂級範圍傳遞給子級有關。任何幫助深表感謝。

+0

可能重複的情況[Python中 「最小驚訝」:易變的默認參數(HTTP://計算器.com/questions/1132941/python-the-mutable-default-argument中的至少驚訝) – wim 2013-02-20 01:46:29

回答

1

試着改變你的默認children

class Node(object): 
    def __init__(self, children=None tag=None): 
     self.children = children if children is not None else [] 
     self.tag = tag 

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

    def getChildren(self): 
     return self.children 

    def printAll(self): 
     print self.getChildren() 
     for child in self.children: 
      child.printAll() 

您可能需要的"mutable default argument"

+0

令人驚歎。謝謝。 – distorteddisco 2013-02-20 01:36:36