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

为何Shell环境中初始id相同的变量运算后is对比为False?

Python中is运算符与整数对象的疑问解答

场景一:x + 100 is y + 100返回False的原因

执行代码如下:

x = 250
y = 250
x + 100 is y + 100  # 结果为False

原因说明:

  • Python对**-5到256之间的小整数做了全局缓存**,直接赋值x=250和y=250时,两个变量会指向内存中的同一个整数对象,所以id(x)与id(y)相同。
  • x + 100和y + 100是两次独立的运算,结果350不在小整数缓存范围内。Python会为这两次运算分别创建全新的整数对象,二者内存地址完全不同。
  • is运算符的作用是判断变量是否指向同一个内存对象,而非值是否相等,因此结果为False。如果用==比较值,x + 100 == y + 100会返回True。

场景二:x += 10和y += 10后x is y返回False的原因

对应代码:

x = 250
y = 250
x is y  # 结果为True
x += 10
y += 10
x is y  # 结果为False

原因解释:

  • 初始阶段x和y复用缓存的250对象,所以x is y返回True。
  • 整数是Python的不可变类型,x += 10并非修改原有250对象的值,而是创建新的整数对象260,再让x指向这个新对象;同理y += 10也会生成另一个独立的260对象。
  • 260不在小整数缓存池范围内,两个260是内存中完全不同的对象,因此x is y返回False。

关键总结

  • 小整数缓存仅覆盖-5到256的整数,超出此范围的整数,即使值相同,也会被创建为不同对象(同一代码块即时复用的特殊情况除外)。
  • 不可变类型的"修改"操作本质是创建新对象,而非修改原有对象内容。
  • 明确is和==的区别:is比较对象身份(内存地址),==比较对象的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:16:09