【发布时间】:2020-08-06 03:48:20
【问题描述】:
假设我有以下名称和对象
original = n = <original_object>
n = n.next = <new_object>
运行上面的代码后,我希望看到original 指向<original_object>,但情况似乎并非如此。
但是,如果我这样做:
original = n = <original_object>
n.next = <new_object> # Attribute of the object class
n = n.next
然后我看到original 指向<original_object>(或者至少我认为我看到的是这样)。
具体例子
我将用 Python 3.8 中的链表来说明这一点:
class Node:
def __init__(self, arg1):
self.next = None
链式赋值:
head = n = Node(None)
n = n.next = Node(None)
print(head.next) # None (the "head" is gone?)
连续分配:
head = n = Node(None)
n.next = Node(None) # *
n = n.next # *
print(head.next) # <__main__.Node object at 0x7fa4e0610ca0>
我的目的是在尾部添加节点时保留链表的“头部”。为什么链式分配和连续分配会得到不同的结果?
【问题讨论】:
-
这能回答你的问题吗? How do chained assignments work?
-
您将
n和n.next分配给同一个Node(),并且在n = Node()运行之后。这意味着head不受影响,因为n在n.next = Node()运行之前首先被重新分配。查看最不被接受的答案。 -
优秀。确实如此。谢谢@Carcigenicate。那就关门好了。对不起,我错过了:/
-
这无疑是 Python 的一个奇怪之处,最终会咬到每个人,就像可变的默认参数一样。
标签: python python-3.x object linked-list