Python小整数缓存机制出现异常结果,求技术解释
Python中300用
is判断为True的原因 is的作用是判断两个变量是否指向同一个内存对象,而非值是否相等(值相等请用==)。- 你了解的[-5,256]小整数池是Python预创建的整数对象池,但这个规则的生效场景存在差异:
- 在交互式命令行里,每行代码独立编译执行,超出小整数池的数每次赋值都会生成新对象,这时候
a=300;b=300;a is b会返回False。 - 但如果是在**脚本文件(.py)**中执行代码,Python的字节码编译器会做额外优化:同一个代码块里的相同常量会被复用。你运行的代码如果是放在脚本里执行,300作为常量会被指向同一个对象,所以
a is b返回True。
- 在交互式命令行里,每行代码独立编译执行,超出小整数池的数每次赋值都会生成新对象,这时候
- 你使用的Python3.10.2版本的编译器包含了这种同代码块内的常量复用优化,所以出现了和预期不符的结果。
- 注意:永远不要用
is判断整数是否相等,除非你明确要检查对象是否为同一个,判断值相等请用==。
内容的提问来源于stack exchange,提问作者linchpin.00
相关产品推荐
相关产品推荐

