Python中变量赋值行为为何存在差异?
为什么Python中两种赋值操作结果不同?
这核心原因是Python里不可变对象和可变对象的赋值逻辑差异,以及变量本质是"对象引用"而非"数据容器"。
示例1:不可变对象的赋值
整数属于不可变类型,一旦创建就不能修改内部值:
n = 1 m = n n = 2 print(n) # 2 print(m) # 1
n = 1:变量n指向内存中值为1的整数对象。m = n:变量m也关联到同一个值为1的整数对象。n = 2:不是修改原来的1,而是让n重新指向一个新的、值为2的整数对象。原来的1对象仍存在,m依然关联它,所以m输出1。
示例2:可变对象的赋值
列表属于可变类型,可以直接修改内部内容:
names = ["a", "b", "c"] visitor = names names.pop() print(names) # ['a', 'b'] print(visitor) # ['a', 'b']
names = ["a", "b", "c"]:变量names指向内存中的这个列表对象。visitor = names:变量visitor也关联到同一个列表对象。names.pop():直接修改了这个列表对象的内部(删除最后一个元素),并没有让names指向新对象。因为visitor和names关联同一个对象,所以visitor输出的也是修改后的列表。
关键总结
- Python变量是"对象标签",不是装数据的盒子,赋值就是把标签贴到对象上。
- 不可变对象(整数、字符串、元组等):无法修改内部,重新赋值=贴新标签到新对象。
- 可变对象(列表、字典、集合等):可以修改内部,所有关联它的标签都会看到变化。
内容的提问来源于stack exchange,提问作者Yang Yang
相关产品推荐
相关产品推荐

