我是小白,最近在看字符串的问题,看了一些教程知道input获得的字符串用is去判断的时候得到的结果为false,这是由于input是底层封装的函数,但我发现另外个问题
s1 = input('请输入:')
s2 = input('请输入:')
print(s1 == s2)
print(id(s1),id(s2))
print(s1 is s2)
结果如下:
请输入:bn
请输入:bn
True
2325871254528 2325871254360
False
这个结果符合之前的答案
但如果我只输入一个字符,结果就不一样了:
请输入:b
请输入:b
True
1862569949144 1862569949144
True
这是为啥,我在网上搜也找不到答案,有大神可以讲解一下吗?为啥输入一个字符串的情况下id地址是一样的?
补充一些楼上
@zuch
的内容。实际上单个字符组成的字符串(即字符)和小整型并不一样,小整型的确是
Python
预先分配的:但字符不是,对于字符的处理,
Python
并没有预分配字符(相关源码文件[bytesobject.c]
),而是第一次创建一个字符时,将其缓存在一个缓冲池
中,下次再出现该字符时,直接从缓冲池
中获取。当然这个差异并不影响你的问题。
事实上,小整型所用到的这种技术也叫做
缓冲池
,或对象池
、对象缓冲池
。所以,如果你想去网上查更详细的资料的话,搜这几个关键字就行了,但一切还是以官方文档和源码为准。