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

Python列表中相等值是否共用同一引用?能否让a is b返回False

是否存在a is b返回False的场景?

当然存在,首先要先明确两个运算符的核心区别:

  • == 只判断两个对象的值是否相等
  • is 判断两个对象是不是内存中的同一个对象,本质比较的是对象的内存地址

你给出的示例返回True,是因为Python自带字符串驻留(intern)优化:符合标识符规则的短字符串会被缓存复用,相同内容的短字符串字面量会指向同一个内存对象,所以a is b返回True。

常见a == b为True但a is b为False的场景


  1. 超出驻留规则的字符串
    长字符串、包含特殊字符的字符串不会触发驻留,相同值也是不同对象:
>>> a = 'hello world!' * 100
>>> b = 'hello world!' * 100
>>> a == b
True
>>> a is b
False
  1. 类型不同的等值对象
    两个不同类型的对象值可能相等,但显然不是同一个对象:
>>> a = 2
>>> b = 2.0
>>> a == b
True
>>> a is b
False
  1. 内容相同的可变对象
    列表、字典这类可变对象,哪怕内容完全一致,单独创建时也是不同的内存对象:
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a == b
True
>>> a is b
False
  1. 超出缓存范围的整数
    Python默认只缓存-5到256之间的小整数,超出这个范围的等值整数也可能是不同对象(该效果在Python交互模式下可复现,部分IDE、脚本模式会做额外优化可能返回True):
>>> a = 257
>>> b = 257
>>> a == b
True
>>> a is b
False

使用建议

日常开发中判断值相等优先用==,只有判断对象是否为None、或者需要明确判断是不是同一个内存对象时才用is。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:30:01