字符串比较结果异常:为何不同拼接方式下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
相关产品推荐
相关产品推荐

