Python中整数值变量is判断在控制台与文件执行结果不同原因
Python相同整数值
is判断结果不一致的原因 - 首先明确核心逻辑:Python中
is关键字判断的是两个变量是否指向内存中的同一个对象,比较的是对象内存地址;==才是判断两个对象的值是否相等。 - 小整数驻留机制的局限性:Python默认仅缓存了
[-5, 256]区间的整数对象,该范围内的整数全局共用同一个实例,任意场景下is判断都为True。而399超出了该缓存区间,默认不会全局复用实例。 .py文件运行时的常量合并优化:当代码作为完整代码块(比如整个.py文件、函数内部、类定义内部)被统一编译时,Python编译器会做常量优化:同一个代码块内出现的相同不可变常量(整数、字符串、元组等)会被合并为同一个实例,减少内存占用。所以在.py文件中,a和b的399会被识别为同一个常量,指向同一个对象,a is b返回True。- 控制台交互模式的执行逻辑:交互式解释器是逐行编译执行,每一行输入都是独立的代码块,无法做跨代码块的常量合并。
a = 399和b = 399是两次独立的编译过程,分别生成了两个值相同但内存地址不同的整数对象,所以a is b返回False。
注意:日常开发中判断数值、字符串等不可变类型的值是否相等时,必须使用
==,不要依赖is的判断结果,避免因为环境、实现差异出现不可预期的错误。
内容的提问来源于stack exchange,提问作者Роман Яровой
相关产品推荐
相关产品推荐

