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

Python对象赋值疑问:链表节点操作为何修改了head?

单链表操作的内存指向解析

我们直接拆解第一种操作的每一步,把内存指向的变化说清楚:

初始状态

链表结构:1 -> 2 -> 3 -> 4,其中:

  • head 指向节点1的内存地址
  • 节点1的next指向节点2,节点2的next指向节点3,节点3的next指向节点4

第一步:current_node = head

current_node 和 head 指向同一个对象——节点1的内存地址。

第二步:current_node = current_node.next

这一步只是把current_node的指向从节点1改成了节点2(也就是head.next指向的那个节点)。此时current_node和head确实不再指向同一个节点,但要注意:current_node现在指向的节点2,本身就是原head链表中的一员,属于head链的一部分。

第三步:current_node.next = current_node.next.next

这一步不是修改current_node的指向,而是修改节点2这个对象本身的next属性:把节点2原本指向节点3的next,改成指向节点4。

因为head的next就是这个节点2,所以当节点2的next属性被修改后,head对应的链表自然就变成了1 -> 2 -> 4——你修改的是链表中某个节点的属性,而这个节点本身就是head链的一部分,不管你用哪个变量去访问它,修改它的属性都会反映到整个链表中。

对比第二种操作

第二种操作中current_node = head后直接修改current_node.next,本质是修改节点1的next属性,同样是修改head链中的节点属性,所以head链表会变化,这个逻辑和第一种完全一致,只是修改的是不同节点的属性而已。

总结:变量的指向改变(比如current_node = current_node.next)只是让变量换了一个节点去指向,但如果后续操作是修改这个节点的属性,而这个节点本身属于原链表,那原链表必然会跟着变化——你修改的是链表中的节点本身,不是变量的指向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:02:44