tem*_*ame 0 python comparison identity python-3.x
那么,让我们来看看我们所知道的:
is运营商相比,运营商比较身份而不是价值==."hello" is "hello"也是如此True.所以我不明白这种行为:
>>>'h' is input()
h
True
>>>'hj' is input()
hj
False
Run Code Online (Sandbox Code Playgroud)
单个字符被视为相同,即使它们不是两个字符串文字,而一个双字符串字符串给出了我期望的结果,非相同性.
由于input()函数是动态创建字符串,因此结果不会被中断,这就是为什么'hj'和动态创建'hj'不相同的原因.但为什么'h'和动态'h'相同呢?
这是否意味着Python缓存/实习生所有长度为1的字符串?
从源代码:
PyObject *
PyString_FromStringAndSize(const char *str, Py_ssize_t size)
{
// ...
if (size == 1 && str != NULL &&
(op = characters[*str & UCHAR_MAX]) != NULL)
{
Py_INCREF(op);
return (PyObject *)op;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
CPython实例化characters数组中的所有单个字符串.
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |