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

为何Python中id(a) is id(b)返回False?预期结果应为True

问题解释

先明确两个核心区别:

  • is 运算符比较的是对象的内存身份,只有当两个变量指向同一个内存对象时才返回True;
  • == 运算符比较的是对象的值,只要值相等就返回True。

再看id()函数的特性:它返回的是代表对象内存地址的整数。Python对小整数(默认范围-5到256)有缓存机制,这些整数会被全局复用,所以对这个范围内的整数用is比较会返回True。但对于超出这个范围的大整数,Python每次都会创建新的整数对象——哪怕数值完全一样,它们也是内存里的不同对象。

回到你的测试代码:

  • a和b指向同一个字符串对象,所以a is b返回True,id(a)和id(b)的数值也完全相同;
  • 但id(a)和id(b)返回的是远大于256的大整数(比如你结果里的1843108275696),这两个整数是Python临时生成的不同对象,所以用is比较时,因为内存地址不一样,返回False;而==只看数值是否相等,所以返回True;
  • 同理,c和d分别存储了这两个大整数对象,所以c is d也是False,c == d是True。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:55:29