我的疑问是当我制作 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
指的是自分配那一刻起b
,a.next
指的是b
:
kam=a.next # kam = b
a.next=None # a.next = None
no kam 指向 b。当你执行 A.next = None 时,A 的下一个指针指向 none ,但 kam 保留对 b 的引用。将它们视为排他性。