我有一个关于突变如何在具有绑定赋值的链表中工作的问题。
假设我们在python中有以下链表数据类型:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
假设我们有一个对象a
,并将curr
绑定到a
:
a = ListNode(1, ListNode(2))
curr = a
两者都是1->2->。现在,如果我尝试变异curr
:
curr.next = ListNode(3)
curr = curr.next
现在CCD_ 5是1->3->而CCD_ 6为3->。
我感到困惑的部分来了。如果我通过以下方式持续更新curr
:
curr.next = ListNode(4)
curr = curr.next
现在CCD_ 8是1->3->4->而CCD_ 9是4->。
我想知道为什么a
会以这种方式更新?
因为之后
curr = a
、curr
和a
是相同的对象。
然后,在之后
curr = curr.next
、curr
和a.next
是同一个对象,您可以通过查看ID(或者更好的方法是,通过回溯并用笔和纸绘制方框和箭头:(
In [8]: id(curr)
Out[8]: 4509135032
In [9]: id(a.next)
Out[9]: 4509135032
因此,当您修改curr.next
时,您也在修改a.next.next
。