2014-10-08 44 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