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

VS Code中Python单例测试代码运行结果与系统终端不一致问题

问题原因解释

1. 基础规则:小整数缓存池

  • CPython默认对-5~256范围内的整数做全局缓存,这个范围内的整数无论在任何位置创建,都是同一个内存对象,所以用is判断会返回True;超过这个范围的整数默认不会做全局缓存,这就是你循环中257及以上的整数i is j返回False的原因。

2. 结果差异的核心原因:常量折叠 优化的作用范围不同

  • CPython在编译单个代码块(比如完整脚本文件、单个函数体、交互式解释器的单条输入)时,会做常量折叠 优化:把当前代码块里相同的不可变字面量(比如整数、字符串)合并为同一个对象,减少内存占用。
    • VS Code运行的是完整的.py脚本文件,全局作用域的num_1 = 1007和num_2 = 1007属于同一个代码块,两个1007字面量被折叠为同一个对象,所以num_1 is num_2返回True。
    • 你提到的系统终端应该是Python交互式解释器(输入python命令进入的>>>交互模式),交互模式下每一行输入都是独立的代码块,两行赋值语句分别编译,不会跨代码块做常量折叠,所以两个1007是不同的对象,is返回False,符合你的预期。
  • 验证方式:你可以在交互式解释器中定义一个函数,把两个1007的赋值和is判断放在函数体内运行,同样会返回True,因为函数体是同一个代码块,会触发常量折叠。

3. 最佳实践

  • 永远不要用is判断数值、字符串这类不可变类型的值是否相等,is的作用仅为判断两个变量是否指向完全相同的内存对象,它的结果高度依赖解释器的优化策略,没有可移植性。判断值相等请固定使用==运算符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:15:00