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

Python中整数与列表同为对象,为何赋值后修改行为不同?

为什么修改x后y的表现不同?

先看第一个代码片段:

x = 10
y = x
x = x + 1

这里的10是不可变对象(整数属于Python的不可变类型)。执行y = x时,y和x指向同一个整数对象10。但x = x + 1并非修改原有10对象,而是创建了新的整数对象11,再让x指向这个新对象。y仍指向原来的10,所以y的值不会变化。

再看第二个代码片段:

x = [0, 1]
y = x
x.pop()

列表属于可变对象。y = x同样让y和x指向同一个列表对象[0,1]。而x.pop()是直接修改这个列表对象的内部状态(移除最后一个元素),由于y和x指向的是同一个对象,所以y也会呈现修改后的结果。

核心区别:不可变对象 vs 可变对象

  • 不可变对象(整数、字符串、元组等):无法修改对象本身,任何看似修改的操作都会生成新对象。变量只是指向对象的引用,重新赋值会让变量指向新对象。
  • 可变对象(列表、字典、集合等):可以直接修改对象的内部状态,所有指向该对象的变量都会同步看到这个变化。

本质:变量是引用,而非对象本身

Python中的变量本质是贴在对象上的"标签",不是对象的副本。当你把x赋值给y时,只是给同一个对象多添加了一个标签:

  • 对不可变对象,你无法修改对象内容,只能让变量标签指向新的对象;
  • 对可变对象,你可以直接修改对象的内部数据,所有指向该对象的标签都会反映出这个修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:20:26