我正在使用 Python 2.7,并且正在尝试实现一个支持联合查找的节点对象。这是相关的代码:
class Node:
def __init__(self, nodeID):
self.nodeID = nodeID
self.parent = self
self.size = 1
def __repr__(self):
return "<node nodeID: %d clusterID: %d clusterSize: %d>"
% (self.nodeID, self.clusterID(), self.clusterSize())
def union(self, other):
'''someNode.union(otherNode) joins two nodes by attaching the parent of
the node with the smaller cluster size beneath the parent of the larger node.
If nodes have equal cluster size, otherNode is joined below someNode'''
selfLeader = self.find() #top node of self
selfCID = selfLeader.nodeID
otherLeader = other.find() #top node of other
otherCID = otherLeader.nodeID
if (selfCID == otherCID):
return
elif (selfLeader.size <= otherLeader.size):
otherLeader.size += selfLeader.size
selfLeader.parent = otherLeader
else:
selfLeader.size += otherLeader.size
otherLeader.parent = selfLeader
这不起作用:-(
如果不清楚,我的意思是最初创建一个节点,该节点包含对其父节点的引用,该父节点最初只是它自己(因为它是集群中的唯一节点)。但是,当我尝试在联合操作中重新分配 self.parent 时,我最终会重新分配 self。我很确定这是因为我在init中设置引用的方式:
self.parent = self
在这里设置(和重置)对父级的引用的正确方法是什么?
谢谢!
# 编辑事实证明我在发布问题时很仓促。分配和重新分配都很好。我在上面报告说,当我分配父母时,自我正在被重新分配,这是不正确的。我考虑删除这个问题,但出于两个原因,我将把它留在这里:
1)人们已经花时间做出回应,我真的很感激。
2)我认为答案对社区很有用,因为它提供了 Python 中对象引用管理的简明演示。