Python中字符串内容相同时is运算符返回False的原因咨询
为什么内容相同的字符串用
is运算符判断返回False? 先看你编写的检查回文的代码:
string = "radar" new = string[::-1] print(new) print(string is new) print(string in new) print(string == new)
对应的输出:
radar False True True
你疑惑的点在于:明明两个字符串内容一致,is却返回False。这要从==和is的本质区别说起:
==比较的是两个对象的内容是否相等,只要字符串的字符序列完全匹配,就会返回True,所以这里string == new结果为True。is是判断两个变量是否指向同一个内存对象,只有当它们的内存地址完全相同时才返回True。
你通过string[::-1]切片生成的new,是一个全新的字符串对象——哪怕它的内容和原字符串string完全一样,Python也会为它分配独立的内存空间。这就导致string和new指向的是两个不同的对象,所以is运算符返回False。
额外补充:Python有字符串驻留机制,对于部分字面量形式的字符串(比如直接赋值的短字符串),Python会复用内存对象以节省空间,但通过切片、字符串拼接等操作动态生成的字符串,哪怕内容和现有字符串一致,也会创建新的对象,不会触发驻留机制。
内容的提问来源于stack exchange,提问作者Krish
相关产品推荐
相关产品推荐

