我是python的新手,我正在探索它的一些核心功能.
你能解释一下为什么下面的例子总是在带有特殊字符的字符串时返回false:
>>> a="x"
>>> b="x"
>>> a is b
True
>>> a="xxx"
>>> b="xxx"
>>> a is b
True
>>> a="xü"
>>> b="xü"
>>> a is b
False
>>> a="ü"
>>> b="ü"
>>> a is b
True
>>> #strange: with one special character it works as expected
Run Code Online (Sandbox Code Playgroud)
我知道每个赋值中具有特殊字符的字符串的存储位置不同,我已经使用id()函数检查了它,但是为什么python以这种不一致的方式处理字符串?
Python(至少是参考实现)有一个用于小整数和字符串的缓存。我猜想 ASCII 范围之外的 unicode 字符串大于缓存阈值(内部 unicode 使用 16 或 32 位宽字符、UCS-2 或 UCS-4存储),因此不会缓存它们。
[编辑]
在以下位置找到了更完整的答案:About the moving id of a Python immutable string
另请参阅:http ://www.laurentluce.com/posts/python-string-objects-implementation/