链表赋值突变



我有一个关于突变如何在具有绑定赋值的链表中工作的问题。

假设我们在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 = acurra是相同的对象。

然后,在之后

curr = curr.nextcurra.next是同一个对象,您可以通过查看ID(或者更好的方法是,通过回溯并用笔和纸绘制方框和箭头:(

In [8]: id(curr)
Out[8]: 4509135032
In [9]: id(a.next)
Out[9]: 4509135032

因此,当您修改curr.next时,您也在修改a.next.next

相关内容

  • 没有找到相关文章

最新更新