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

字符串比较结果异常:为何不同拼接方式下is比较结果不同?

字符串拼接后is比较结果不同的原因

先看你给出的代码示例:

b = "test"+str(1)
a = "test"+str(1)
print(a is b) # False

b2 = "test"+"1"
a2 = "test"+"1"
print(a2 is b2) # True

这种差异是Python的字符串驻留机制导致的:

  • 针对"test"+"1"这类字面量拼接:
    Python解释器在编译阶段就能确定最终拼接结果是"test1",会自动把这个字符串字面量存入内存里的字符串池。之后再创建相同的字面量时,会直接复用池里的同一个对象,所以a2和b2指向的是内存中同一个字符串对象,用判断对象身份的is比较自然返回True。

  • 针对"test"+str(1)这类拼接:
    str(1)是在程序运行阶段才会计算出结果的表达式,整个拼接操作也是在运行时执行的。Python不会自动驻留这种动态生成的字符串,所以a和b会分别生成两个内容相同但内存地址不同的字符串对象,用is比较就返回False。

注意:is用来判断两个变量是否指向同一个内存对象,而==才是用来比较字符串内容是否一致的。如果你的需求是判断内容相同,应该用==而非is。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 14:23:17