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

Python中名称是指针还是引用?数组元素与赋值变量的差异探究

Python中名称的本质:既不是指针也不是引用,而是对象绑定

这是个非常典型且容易混淆的问题——很多Python开发者刚入门时都会纠结变量到底是指针还是引用,其实更准确的表述是:Python中的名称(变量)是对对象的绑定,咱们通过你给出的两个代码块一步步拆解:

代码块1:重新绑定名称不会修改原对象

先看这段代码:

L = [[], []]
L1 = L[1]
L1 = [1]  # 关注此行执行后的变化
print(L)  # 输出 L = [[], []]

这里的关键逻辑是:

  • 执行L1 = L[1]时,我们把L1这个名称绑定到了L列表中索引为1的那个空列表对象上(此时L1和L[1]指向同一个空列表)。
  • 但接下来的L1 = [1],并不是修改原来的空列表,而是给L1这个名称重新绑定了一个新的列表对象[1]。原来的空列表对象并没有被改动,所以L的内容自然不会变。

代码块2:修改容器对象的内部绑定才会改变原容器

再看修改后的代码:

L = [[], []]
L1 = L[1]
L[1] = [1]  # 关注此行执行后的变化
print(L)  # 输出 L = [[], [1]]

这里的核心区别在于:

  • L[1] = [1]是直接操作L这个列表容器本身——它把L内部索引1位置的绑定,从原来的空列表改成了新的列表[1]。
  • 此时L1依然绑定着原来的空列表,但L这个容器的内部内容已经被更新了,所以打印L时会看到变化。

总结:Python名称的核心逻辑

Python里没有“变量存储值”的概念,所有的名称都是指向对象的绑定关系:

  • 赋值操作x = y的本质是把名称x绑定到y当前指向的对象(如果y是名称),或者绑定到新创建的对象(比如x = [1])。
  • 和C的指针不同:你不能直接操作内存地址,也不能通过名称“解引用”去修改内存。
  • 和C的引用不同:Python的名称可以随时被重新绑定到其他对象,而C的引用一旦绑定就无法更改目标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:49:47