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

Python中通过变量引用操作类实例的疑问:修改与删除是否生效

Python链表节点操作的核心疑问解答

一、对last_node的操作是否会修改原类实例?

首先明确:Python中的变量本质是对象的引用,不是对象本身。

  • 当执行last_node.data = "some data"时:
    last_node是指向链表中某个节点对象的引用,修改它的data属性会直接作用于原节点实例,不会创建新节点,原链表中的对应节点数据会被同步修改。

  • 当执行del(last_node)时:
    这只是删除了last_node这个引用变量,并不会删除链表中的原节点对象。原节点依然存在于链表中,因为链表的其他节点(比如前一个节点的next指针)还在引用它。

另外提一句:你查找最后一个节点的代码存在逻辑问题,正确的写法应该是:

current_node = list.header
while current_node.next is not None:
    current_node = current_node.next
last_node = current_node  # 此时current_node才是真正的最后一个节点

你原来的代码会把倒数第二个节点赋值给last_node,因为循环结束时current_node.next为None,但循环内仅把current_node赋值给last_node,这是个小bug。

二、del(that_node)是否会删除链表中的节点?

这段代码毫无意义,无法删除链表中的节点。

  • that_node = this_node.next只是让that_node指向this_node.next对应的节点对象,它和this_node.next是同一个对象的两个引用。
  • del(that_node)仅删除that_node这个引用变量,this_node.next依然指向原节点,链表结构没有任何变化。

如果要真正删除this_node之后的节点,需要修改链表的指针关系:

# 跳过要删除的节点,让this_node直接指向它的下下个节点
that_node = this_node.next
this_node.next = that_node.next
# 此时如果没有其他引用指向that_node对应的节点,Python垃圾回收会自动回收它

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:54:56