gpt4 book ai didi

python - 如何在 python 中交换 2个对象的身份?

转载 作者:行者123 更新时间:2023-11-28 20:51:38 24 4
gpt4 key购买 nike

我有同一个类 RBnode 的 2 个实例 xy。有没有办法交换它们的身份,以便所有对 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_node 时发生了错误,调用函数持有对节点x 的引用,恰好是y.next。有点像

x = y.next
self.remove_node(y)
x.parent
>>> AttributeError: 'NoneType' object has no attribute 'parent'

我可以交换xy 的所有相应属性。但这需要很多行,因为节点的结构相当复杂。

最佳答案

我一定是遗漏了什么,因为这有什么问题吗?

>>> 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 中交换 2个对象的身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9074850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com