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

Python列表赋值操作差异疑问:为何两段相似代码输出结果不同

Python两段列表赋值代码结果差异的核心原理

这两个运行结果的差异,本质来自Python的变量引用语义,以及「可变对象原地修改」和「变量重新赋值」两种操作的本质区别:


第一段代码运行逻辑

list_1 = [1]
list_2 = list_1
list_1[0] = 2
print(list_2)

运行步骤:

  • 执行list_1 = [1]:内存中创建列表对象[1],变量list_1存储该对象的内存地址,指向这个列表
  • 执行list_2 = list_1:将list_1存储的内存地址赋值给list_2,此时两个变量指向同一个列表对象
  • 执行list_1[0] = 2:这是原地修改可变对象的操作,没有创建新对象,直接修改了公共列表的第一个元素值
  • 最终打印list_2时,读取的是修改后的列表,输出为[2]

第二段代码运行逻辑

list_1 = [1]
list_2 = list_1
list_1 = 2
print(list_2)

运行步骤:

  • 前两步和第一段完全一致:list_1和list_2共同指向列表对象[1]
  • 执行list_1 = 2:这是变量重新赋值操作,内存中创建新的整数对象2,让list_1转而指向这个新的整数地址,该操作不会影响原有列表对象,也不会修改list_2的指向
  • 最终list_2仍然指向原来的[1]列表,输出为[1]

核心区别总结

  • 对列表、字典这类可变对象执行变量[索引] = 新值、append()、update()等操作时,修改的是对象本身,所有指向该对象的变量都会同步感知到变化
  • 执行变量 = 新值这类直接赋值操作时,只是改变当前变量的指向,让它关联到新的对象,完全不会影响其他指向旧对象的变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:39:02