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

Python中用is运算符判断对象:为何输入同字符串与字面量赋值结果不同?

Python is运算符字符串判断结果差异问题解答

核心基础:is和==的差异

  • is运算符判断的是两个变量是否指向内存中的同一个对象,对比的是对象的内存地址
  • ==运算符判断的是两个变量指向的对象存储的内容是否相等,和内存地址无关

字面量赋值返回True的原因

这是CPython解释器的字符串驻留(String Interning) 机制导致的:为了降低内存占用、提升字符串比对效率,CPython会在编译阶段对符合规则的字符串(短长度、仅含字母/数字/下划线的标识符类字符串)做缓存复用,相同内容的这类字符串只会在内存中存一份。
你写的两个"cat"字面量在代码编译阶段就被识别为相同内容,直接指向了同一个缓存对象,所以x is y返回True。

注意:字符串驻留是CPython的实现细节,并非Python语法强制要求的规则,也不是所有字符串都会触发驻留,长字符串、含特殊字符的字符串通常不会被驻留。


input输入相同内容返回False的原因

input()函数返回的字符串是运行时动态生成的对象,不会进入编译阶段的驻留缓存池,每次调用input哪怕输入的内容完全一致,都会生成独立的新字符串对象,内存地址不同,所以x is y返回False。
如果要让动态生成的字符串也触发驻留,可以主动调用sys.intern()方法手动缓存:

import sys
x = sys.intern(str(input("Enter a string: ")))       # 输入"cat"
y = sys.intern(str(input("Enter another string: "))) # 输入"cat"
print(x is y) # 输入相同内容时会输出True

最佳实践

判断字符串内容是否相等时,永远使用==运算符,仅当你需要确认两个变量是否指向同一个内存对象时,才使用is运算符(比如判断变量是否为None时常用x is None)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:45:05