Jupyter Notebook与在线Python IDE输出差异:元组内存比较疑问
关于元组
is判断结果在不同环境的差异解释 首先明确核心:元组不可变≠Python必须让所有内容相同的元组共享内存地址,is判断的是两个变量是否指向同一个内存对象,而Python对元组的内存复用优化,是分运行环境和场景的。
具体差异原因:
- 像online-python这类在线运行环境,会在代码编译阶段做更激进的常量折叠优化——如果两个元组的内容完全相同,编译器会直接把它们合并成同一个对象,所以
a is b返回True。 - Jupyter Notebook(基于IPython)的交互执行模式下,代码是逐单元格解析执行的,IPython的上下文不会对这类元组做自动驻留优化。哪怕是在普通的CPython脚本里,除非元组里的元素都是编译期常量且满足特定条件,否则也不会自动复用内存,这时候
a is b就会返回False。
补充说明:
别把元组的不可变性和内存复用划等号——不可变性只是保证元组内容不能被修改,但Python并没有规定必须让所有内容相同的不可变对象都共享内存。比如小整数(-5到256)、特定字符串会被驻留复用内存,但元组的驻留没有统一的强制规则,完全看运行环境的优化策略。如果要判断内容是否相同,用==才是正确的方式,is只适合判断对象身份。
内容的提问来源于stack exchange,提问作者Ikenna
相关产品推荐
相关产品推荐

