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的一个奇怪之处就是它最终会咬到所有人,比如可变的默认参数。