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

Python中变量指向同一对象后重赋值为何互不影响?

理解Python变量的赋值与重绑定机制

嘿,这个困惑太正常了——很多刚接触Python的朋友都会在这里卡一下,核心是要搞懂Python变量本质是“标签”而非“盒子”,我给你一步步拆解:

首先先还原你的操作:

# 创建一个列表对象,把标签a贴在它上面
a = [1, 2, 3]
# 把标签b也贴到同一个列表对象上
b = a
# 验证两个标签指向同一个对象
print(b is a)  # 输出 True

这时候a和b就像贴在同一个盒子(列表对象)上的两张标签,不管用哪个标签操作这个盒子(比如a.append(4)),另一个标签看到的结果都是一样的。

接下来重点来了,你执行了这行代码:

# 创建一个新的字典对象,把标签a从原来的列表上撕下来,贴到这个新字典上
a = {'x': 'y'}

这里的a = ...不是修改原来的列表对象,而是重新绑定变量:相当于你把a这个标签从之前的列表上移走,贴到了一个全新的字典对象上。而b这个标签还牢牢贴在原来的列表上,所以此时:

print(a is b)  # 输出 False
print(a)       # 输出 {'x': 'y'}
print(b)       # 输出 [1, 2, 3]

简单类比一下:

  • 把每个Python对象想象成一栋房子
  • 变量就是房子的门牌号
  • 一开始a和b都是「1号房(列表)」的门牌号
  • 当你执行a = {'x':'y'},相当于把a这个门牌号拆下来,钉到了「2号房(字典)」上
  • 而b还是「1号房」的门牌号,自然和a指向的房子不一样了

要区分两个关键操作:

  • 修改对象本身:比如a.append(4),这是给「1号房」添家具,b作为同一房子的门牌号,看到的房子自然也变了
  • 重新绑定变量:比如a = ...,这是换门牌号的指向,和原来的房子没关系了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:18:35