【问题标题】:Linked List Assignment Mutation链表赋值突变
【发布时间】:2020-09-15 21:13:04
【问题描述】:

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

假设我们在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

现在a 是 1 -> 3 -> 而 curr 是 3 ->。

这是我感到困惑的部分。如果我继续通过以下方式更新curr

curr.next = ListNode(4)
curr = curr.next

现在a 是 1 -> 3 -> 4 -> 而 curr 是 4 ->。

我想知道为什么a会以这种方式更新?

【问题讨论】:

  • 您为什么希望a 不会受到影响?
  • 你想得到什么?

标签: python linked-list


【解决方案1】:

因为之后

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

【讨论】:

  • 非常感谢!我的困惑现在已经解决了。
猜你喜欢
  • 1970-01-01
  • 2021-02-11
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多