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

为何Python中较大整数的a is b返回False?内存地址差异解析

为什么整数超过256后a is b返回False?

核心原因:Python的整数缓存机制

Python为了优化性能,会预创建并缓存范围在-5到256之间的整数对象。这些对象在程序运行期间会被全局复用,所以任何指向这个范围内整数的变量,都会引用同一个内存地址的对象,因此a is b返回True。

对于超出-5~256范围的整数,默认不会被缓存。每次通过表达式(比如循环里的i*20)生成时,Python都会创建一个全新的整数对象。即使两个变量的值相同,它们引用的也是不同的内存对象,所以a is b返回False。

针对你的两个场景解释

  1. 循环中的两次独立赋值
    你循环里的a = i*20和b = i*20是两次独立的表达式计算。当结果≤256时,复用缓存的整数对象,所以a和b指向同一个对象;当结果≥260时,两次计算各自生成新的对象,因此id(a) != id(b),a is b返回False。

  2. 同一行赋值a = b = 260
    这种赋值方式下,Python会先创建一个260的整数对象,再将a和b同时指向这个对象。此时a和b引用的是同一个内存地址,所以a is b会返回True,和你预期一致。你可能混淆了这种同一行赋值和循环中两次独立赋值的场景。

补充说明

  • is比较的是对象的身份(内存地址),等价于id(a) == id(b);而==比较的是对象的值是否相等,所以即使a is b为False,a == b依然会是True。
  • 整数缓存的范围是Python的默认实现优化,通常不需要修改,除非有特殊需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:16:33