为什么Python将单字符串字符串视为相同?

tem*_*ame 0 python comparison identity python-3.x

那么,让我们来看看我们所知道的:

  1. is运营商相比,运营商比较身份而不是价值==.
  2. Python实习生字符串文字"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的字符串?

Eri*_*ric 6

从源代码:

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数组中的所有单个字符串.