Python 在具有链指定的链表中迭代

Python 在具有链指定的链表中迭代,python,python-3.x,object,linked-list,Python,Python 3.x,Object,Linked List,假设我有以下名称和对象 original = n = <original_object> n = n.next = <new_object> 然后我看到原件指向(或者至少我认为我看到的是) 具体例子 我将用Python 3.8中的链表来说明这一点: class Node: def __init__(self, arg1): self.next = None 链分配: head = n = Node(None) n = n.next = Node

假设我有以下名称和对象

original = n = <original_object>
n = n.next = <new_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>
连续分配任务:

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>
head=n=节点(无)
n、 下一步=节点(无)#*
n=n.下一个#*
打印(头,下一个)#

我在这里的意图是在尾部添加节点时保留链表的“头部”。为什么链式作业和连续作业的结果不同

正如@Carcigenicate迅速指出的,解释了发生的事情:

简言之,在我的示例中,遵循该论点,如果我这样做:

n = n.next = Node(None)
这相当于:

temp = Node(None)
n = temp
n.next = temp

因此,
n
在链接列表中“前进当前指针”(
n
)之前被分配一个新节点,而我想做的是先创建一个新节点,链接到它,然后将当前指针(
n
)前进到新节点

正如@Carcigenicate迅速指出的,解释了发生的事情:

简言之,在我的示例中,遵循该论点,如果我这样做:

n = n.next = Node(None)
这相当于:

temp = Node(None)
n = temp
n.next = temp

因此,
n
在链接列表中“前进当前指针”(
n
)之前被分配一个新节点,而我想做的是先创建一个新节点,链接到它,然后将当前指针(
n
)前进到新节点

这回答了你的问题吗?您正在将
n
n.next
分配给相同的
Node()
,并且在运行
n=Node()
之后。这意味着
head
不会受到影响,因为
n
是在
n.next=Node()运行之前首先重新分配的。请参阅顶部未被接受的答案。非常好。是的。谢谢@Carcigenicate。那就好了。抱歉,我没有注意到:/这确实是Python的一个奇怪之处,它最终会咬到所有人,比如可变默认参数。这是否回答了您的问题?您正在将
n
n.next
分配给相同的
Node()
,并且在运行
n=Node()
之后。这意味着
head
不会受到影响,因为
n
是在
n.next=Node()运行之前首先重新分配的。请参阅顶部未被接受的答案。非常好。是的。谢谢@Carcigenicate。那就好了。很抱歉,我没有注意到这一点:/Python的一个奇怪之处就是它最终会咬到所有人,比如可变的默认参数。