为何使用is语句判断字符串会得到不同结果?
问题解释
这是Python的**字符串驻留(string interning)**优化机制导致的差异,核心要先明确:
is运算符判断的是两个对象是否为同一个内存地址的实例,而非值是否相等;判断值相等应该用==。
具体原因:
- 对于
'book'这类符合Python标识符规则的字符串(无空格、仅由字母/数字/下划线组成,且长度较短),Python会自动将其驻留到内存的字符串池中,避免重复创建相同内容的对象。所以变量a和字面量'book'指向的是同一个内存对象,a is 'book'返回True。 - 而
'two book'包含空格,不符合标识符规则,Python默认不会对这类字符串进行自动驻留。此时变量a是新创建的对象,字面量'two book'也是另一个新对象,二者内存地址不同,a is 'two book'就返回False。
注意:字符串驻留是Python的底层优化,不同版本、运行环境的规则可能有细微差异,实际开发中永远用 == 判断字符串值相等,不要依赖 is 的结果。
内容的提问来源于stack exchange,提问作者m.r
相关产品推荐
相关产品推荐

