长度小于 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 301 天前
这些只不过是 CPython 的实现细节,语言并没有做规定。不建议依赖这样的特性。
同样的代码, 在 PyPy 中的运行结果就不是这样的。四个对象都不一样 |
2
CaptainD 301 天前
不仅是字符串,int 也有驻留,我第一次知道这件事的时候感觉 Python 还挺浪漫的
|
3
nagisaushio 301 天前 via Android
@CaptainD 为啥是浪漫😂
|
4
jackOff 301 天前
不建议使用,至少最新 ide 都在提示不要使用 is 语法
|
7
iorilu 294 天前
真想确定对象是否是同一个, 还是用 id 把
除非是上面说的 is None 这种用法 |