这是一个相当具体的问题,但由于我无法弄清楚这里发生了什么,让我向您展示这个问题:
生长决策树,我有一个拆分节点的拆分函数,即将两个子节点附加到一个节点。出于某种原因,下面的代码将节点本身分配为子节点,这样 id(currentNode.children[0])==id(currentNode):
def split(currentNode):
if impure(currentNode.data):
currentNode.attribute = getBestAttr(currentNode.attributes,currentNode.data);
childrenAttributes = deepcopy(currentNode.attributes);
childrenAttributes.remove(currentNode.attribute);
childrenData = splitData(currentNode.data,currentNode.attribute);
for i in range(2):
currentNode.children[i] = node(childrenData[i],childrenAttributes);
split(currentNode.children[i]);
关键部分可能在哪里:
for i in range(2):
currentNode.children[i] = node(childrenData[i],childrenAttributes);
split(currentNode.children[i]);
据我了解,构造函数调用应该返回对新创建的节点对象的引用,该引用与对父节点的引用决不能相同,因为它是一个新对象。
节点对象是:
class node:
data = None;
attributes = None;
attribute = None;
children = [None,None];
def __init__(self,data,attributes):
self.data = data;
self.attributes = attributes;
由于我是 Python 中的 oop 新手,并且总体上对 oop 不是很有经验,所以我希望我在这方面有一些误解,但我不知道如何指定问题。谢谢。