我有2个实例x和y同一个类RBnode.有没有交换自己的身份,让所有参考的方式x去y,反之亦然?
例如,
x = RBnode()
y = RBnode()
x.data = 1
y.data = 2
L = [x,y]
exchange_identity(x,y)
print x.data, y.data, (L[0] is y)
>>> 2 1 True
Run Code Online (Sandbox Code Playgroud)
实际上我正在构建红黑树的扩展.树的节点被实现为对象.在编写节点删除方法时,我需要交换两个节点,以便要删除的节点位于树的"底部".
首先,我尝试在两个节点中交换数据:
def remove_node(self, y):
''' remove node y from tree
return (y.key,y.value) if successful'''
... ... ...
# exchange y's data with that of its successor y.next
y.key = y.next.key
y.value = y.next.value
Run Code Online (Sandbox Code Playgroud)
但后来remove_node调用时发生错误,调用函数持有对节点的引用x,这恰好是y.next.就像是
x …Run Code Online (Sandbox Code Playgroud)