2014-10-08 58 views
0

所以我不知道是什麼原因導致了這個錯誤。我不知道該怎麼形容它沒有表現出你,所以這裏是我的代碼的相關部分:Python,從類對象中抓取信息不起作用

class Node(object): 
    def __init__(self, contents, children): 
     self.contents = contents 
     self.children = children 


def makeNode(district, parent): 
    new_contents = parent.contents 
    new_contents.append(district) 
    new = Node(new_contents, []) 
    parent.children.append(new) 
    return new 


root = Node([], []) 
data = [[1,1,'r'],[1,2,'d'],[1,2,'r'],[1,4,'d']] 
makeNode(data, root) 

這裏的問題:new.contents改變按計劃進行,但這樣是parent.contents。發生了什麼?

+0

提示:什麼是的輸出腳本'a = []; b = a.append(23);打印(B)'? – Kevin 2014-10-08 17:05:33

+0

[附加項目到列表的可能的副本](http://stackoverflow.com/questions/2505529/appending-item-to-lists-python) – vaultah 2014-10-08 17:05:38

+0

另外,你創建類級別的'內容'和'子級'然後在'__init__'中創建相同變量的對象級版本。你是否在任何地方使用課堂級別列表?如果沒有,你應該刪除它們。 – tdelaney 2014-10-08 17:27:22

回答

0

正如您在評論中提到的那樣,您必須將內容 pf'parent.contents'複製到'new_contents'中。否則,你通過引用訪問列表,這顯然不是預期的。

所以,你的「makeNode」功能可以開始如下:

def makeNode(district, parent): 
    new_content = copy.deepcopy(parent.contents) 
    ... 

我希望,我可以明確的事情了爲後來的讀者...;)

+1

其實,new_content = list(parent.contents)甚至可以工作。但是,謝謝! – 2014-10-09 03:03:04