链表查询



我的疑问是当我制作 A.next=None 时,kam 变量不应该也存储 None 吗?为什么仍然指向节点 6?

class Node:
def __init__(self, data):   # data -> value stored in node
self.data = data
self.next = None

a=Node(5)
b=Node(6)
c=Node(7)
d=Node(8)
a.next=b 
b.next=c 
c.next=d 
kam=a.next
a.next=None

while kam is not None:
print(kam.data)
kam=kam.next

这是因为您将a实例的属性next设为 None,而不是c节点。当 Python 运行时kam=a.next真正发生的事情是kam成为a.next值所指向的任何内容。如果您以后更改a.next则并不意味着kam会更改。

我的疑问是当我制作 A.next=None 时,kam 变量不应该也存储 None 吗?为什么仍然指向节点 6?

没有。Python 执行赋值。因此,它kam参考a.next当时所指的内容。因此,它复制引用。如果以后更改该值,则不会反映kam本身,因为它在您分配引用时创建了引用的副本。

所以kam指的是自分配那一刻起ba.next指的是b

kam=a.next    # kam = b
a.next=None   # a.next = None

no kam 指向 b。当你执行 A.next = None 时,A 的下一个指针指向 none ,但 kam 保留对 b 的引用。将它们视为排他性。

相关内容

  • 没有找到相关文章

最新更新