You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何修改cur后ListNode的a.next未改变?技术问题咨询

问题:修改cur后为何a.next的值未发生变化?

前置定义(ListNode类)

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

测试代码

a = ListNode(0)
b = ListNode(0)
a.next = b 

print(a.next) 

cur = b 
cur = ListNode(3)

print(a.next, a.next.val)

输出结果

<__main__.ListNode object at 0x7fd131f7e910>
<__main__.ListNode object at 0x7fd131f7e910> 0

请问为何修改cur后,a.next的值没有发生变化?


解答

在Python中,变量本质是指向对象的引用,而非对象本身,这是核心原因:

  • 执行cur = b时,cur只是获得了指向b所对应ListNode对象的引用——这个对象和a.next指向的是同一个(内存地址为0x7fd131f7e910的实例)。
  • 但执行cur = ListNode(3)时,你并没有修改原来的对象,而是让cur这个引用重新指向了一个全新创建的ListNode实例。此时cur和b、a.next的引用关系完全断开,新对象和旧对象毫无关联,自然不会影响a.next的值。

如果想要修改a.next指向的对象内容,应该操作引用指向的对象属性,比如:

cur = b
cur.val = 3  # 修改原有对象的val属性

这样a.next.val就会变成3,因为cur指向的还是原来那个对象,只是修改了它的内部属性。

简单类比:cur就像一把钥匙,一开始开的是b对应的门;后来你把钥匙换成了开新门的钥匙,原来的门不会有任何变化;只有用原来的钥匙去改动门里的东西,原来的门才会出现变化。


内容的提问来源于stack exchange,提问作者Dian He

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:10:08