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
相关产品推荐
相关产品推荐

