
长度小于 4096 的相同字符串,Python 是只存一个。 大于 4096 的,即使值相同,也是分别存两个。 一个例子:
>>> a = 'Y'*4096 >>> b = 'Y'*4096 >>> a is b True >>> c = 'Y'*4097 >>> d = 'Y'*4097 >>> c is d False 1 neoblackcap 2024-01-20 20:37:18 +08:00 这些只不过是 CPython 的实现细节,语言并没有做规定。不建议依赖这样的特性。 同样的代码, 在 PyPy 中的运行结果就不是这样的。四个对象都不一样 |
2 CaptainD 2024-01-20 20:40:35 +08:00 不仅是字符串,int 也有驻留,我第一次知道这件事的时候感觉 Python 还挺浪漫的 |
3 nagisaushio 2024-01-20 20:45:07 +08:00 via Android @CaptainD 为啥是浪漫 |
4 jackOff 2024-01-20 20:51:26 +08:00 不建议使用,至少最新 ide 都在提示不要使用 is 语法 |
5 ysc3839 2024-01-20 22:54:25 +08:00 via Android @jackOff 好像在哪看到,Python 的 is 应该只用于比较 None True False 等全局唯一的对象 |
7 iorilu 2024-01-27 16:43:05 +08:00 真想确定对象是否是同一个, 还是用 id 把 除非是上面说的 is None 这种用法 |