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

CPython小整数缓存:多值赋值时为何表现不同?

CPython整数赋值的is判断差异解析

核心原因:编译单元与常量折叠优化

这本质上是CPython编译阶段的常量优化策略差异导致的,和两种赋值方式的编译单元范围直接相关:

  • 单独两行赋值(x=500、y=500):
    在交互模式下,每一行代码都会被当作独立的编译单元,编译成单独的代码对象。每次编译时,都会为500创建一个全新的整数对象,因此x和y指向不同的内存地址,x is y返回False。

  • 单行元组解包赋值(x,y=500,500):
    整行代码属于同一个编译单元,CPython编译器会触发常量折叠优化——识别到同一代码块内出现了两次相同的常量500,只会生成一个整数对象实例。最终x和y都指向这个唯一的对象,所以x is y返回True。

额外说明

  • 这种优化并非小整数缓存的延伸,而是编译器针对同一代码块内常量的复用策略。如果在同一个脚本文件(而非交互模式的单行输入)里,哪怕分两行写x=500和y=500,只要它们处于同一代码块(比如全局作用域、同一个函数内),编译时也会触发常量折叠,x is y同样会返回True。
  • is判断的是对象的身份(内存地址),而==判断的是值。对于整数场景,除非明确需要校验对象身份,否则优先用==比较值更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:51:09