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) >>> 5y +=1时,并不是修改原来的整数5,而是创建了一个新的整数6,再让y指向这个新对象。x仍然指向原来的5,所以x的值不会变。
简单总结:
- 可变对象(比如自定义类实例、列表、字典):赋值后多个变量共享同一个对象,修改对象的属性/内容会影响所有指向它的变量。
- 不可变对象(比如整数、字符串、元组):赋值后变量指向同一个对象,但修改操作会创建新对象,不会影响原变量。
内容的提问来源于stack exchange,提问作者CuriousCarrot
相关产品推荐
相关产品推荐

