作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有同一个类 RBnode
的 2 个实例 x
和 y
。有没有办法交换它们的身份,以便所有对 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'
我可以交换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 中交换 2个对象的身份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9074850/
我是一名优秀的程序员,十分优秀!