如何交换2个对象';python中的身份?

如何交换2个对象';python中的身份?,python,object,identity,memory-address,Python,Object,Identity,Memory Address,我有两个实例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 实际上,我正在建造红黑树的延伸。树的节点作为对象实现。在编写节点删除方法时,我需要交换两个节点,以便要

我有两个实例
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
实际上,我正在建造红黑树的延伸。树的节点作为对象实现。在编写节点删除方法时,我需要交换两个节点,以便要删除的节点位于树的“底部”

首先,我尝试在两个节点中交换数据:

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
但是,当调用
remove\u node
时,调用方函数持有对节点
x
的引用,该节点恰好是
y.next
时,出现了一个错误。差不多

x = y.next
self.remove_node(y)
x.parent
>>> AttributeError: 'NoneType' object has no attribute 'parent'
我可以交换
x
y
的所有相应属性。
但这需要很多行,因为节点的结构相当复杂。

我肯定遗漏了什么,因为这有什么问题

>>> class RBnode(object):
...   pass
... 
>>> x = RBnode()
>>> y = RBnode()
>>> id(x), id(y)
(20552592, 20552528)
>>> x,y = y,x
>>> id(x), id(y)
(20552528, 20552592)
或者你的意思是重新分配所有的名字,比如某种物体的身份盗窃?虽然可以在C级工作,但如果您可以在python中完成这项工作而不破坏主要功能,我会非常惊讶

“身份盗窃”在Python中是不可能的;但是,您通常可以交换两个不同对象的内容(甚至可以交换用户定义类的类型):


你可能对(但也有龙)感兴趣。我想做一些事情,比如交换两个对象的内存地址,我想这就是你所谓的“身份盗窃”。我只是好奇这在Python中是否可行。非常感谢。您可以在执行操作时交换对象的内容,或者您可以意识到实际上没有那么多引用需要重新分配,只需交换树中节点的位置,或者您可以添加一个间接级别。
>>> n = Node()
>>> o = Node()
>>> p = Node(n, o)
>>> q = Node()
>>> r = Node(p, q)

>>> # swap bodies of p and r
>>> p.left, p.right, r.left, r.right = p.right, p.left, r.right, r.left