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

Python中给两个变量赋值为500时'is'运算符为何返回True?

问题原因说明

你提到的is运算符判断规则是正确的:is确实只有在两个变量指向内存中同一个对象时才会返回True,你观察到的特殊结果是Python解释器的代码块常量复用优化机制导致的,和常见的小整数驻留机制无关。


具体原理

  1. 首先澄清小整数驻留机制的适用范围:Python默认会缓存-5~256范围内的所有整数对象,只要引用这个范围内的整数,所有变量都会指向同一个缓存对象,所以这个范围内的整数赋值给不同变量时is都会返回True。但500不在这个缓存范围里,所以这个机制和你遇到的现象无关。
  2. 你测试的代码如果是写在同一个.py脚本文件,或是交互环境中写在同一行代码里,Python解释器在编译当前代码块的时候,会扫描其中所有的不可变类型字面量(包括整数、字符串等),把值相同的字面量统一指向同一个对象,避免重复申请内存空间,所以你定义的两个500会被识别为同一个常量,指向同一个内存地址,最终a is b返回True。

验证方法

你可以在Python交互式解释器中分开两行输入代码测试,就会得到你预期的结果:

>>> a = 500
>>> b = 500
>>> a == b
True
>>> a is b
False

这是因为交互环境中每一行都是独立的代码块,编译的时候不会跨代码块复用常量,所以两个500会被分配独立的内存空间。


注意事项

日常开发中不要依赖is判断数值、字符串等不可变类型的值是否相等,is的结果受解释器优化策略影响,不同版本、不同运行环境的表现可能不一致,判断值相等统一使用==运算符即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:54:03