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

Python中ListNode变量赋值后修改y.next为何影响x.next?

为什么修改ListNode变量y的next会影响x的next?

先看你给出的ListNode代码:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
        
x = ListNode(1, None)
a = ListNode(2, None)
y = x
b = ListNode(5, None)

x.next = a
y.next = b

print(x.val)          >>>       1
print(x.next.val)     >>>       5        # 为什么这里不是2???

核心原因:可变对象 vs 不可变对象的赋值逻辑

Python里的变量赋值本质是给对象"贴标签",不是复制对象本身,差异在于对象是可变还是不可变:

  • 对于ListNode这种自定义类实例(可变对象):
    执行y = x时,x和y指向的是同一个ListNode实例——相当于给同一个对象贴了两个标签。不管用x还是y修改这个对象的属性(比如.next),都是在修改同一个对象的内容。你先给x.next赋值a,之后用y.next赋值b,其实是把这个共享实例的next属性从a改成了b,所以x.next自然也变成了b。
  • 对于整数这种不可变对象:
    看你给出的对比代码:
    x = 5
    y = x
    
    y += 1
    
    print(y)      >>>    6
    print(x)      >>>    5
    
    整数是不可变的,执行y +=1时,并不是修改原来的整数5,而是创建了一个新的整数6,再让y指向这个新对象。x仍然指向原来的5,所以x的值不会变。

简单总结:

  • 可变对象(比如自定义类实例、列表、字典):赋值后多个变量共享同一个对象,修改对象的属性/内容会影响所有指向它的变量。
  • 不可变对象(比如整数、字符串、元组):赋值后变量指向同一个对象,但修改操作会创建新对象,不会影响原变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:57:10