浅谈 Python 字符串驻留技术

109 天前
 zywscq

长度小于 4096 的相同字符串,Python 是只存一个。 大于 4096 的,即使值相同,也是分别存两个。 一个例子:

>>> a = 'Y'*4096
>>> b = 'Y'*4096
>>> a is b
True
>>> c = 'Y'*4097
>>> d = 'Y'*4097
>>> c is d
False

原文链接: https://medium.com/techtofreedom/string-interning-in-python-a-hidden-gem-that-makes-your-code-faster-9be71c7a5f3e?sk=6b94567c4d52e5f4d35d7b1a5481a8f5

1862 次点击
所在节点    Python
7 条回复
neoblackcap
109 天前
这些只不过是 CPython 的实现细节,语言并没有做规定。不建议依赖这样的特性。
同样的代码, 在 PyPy 中的运行结果就不是这样的。四个对象都不一样
CaptainD
109 天前
不仅是字符串,int 也有驻留,我第一次知道这件事的时候感觉 Python 还挺浪漫的
nagisaushio
109 天前
@CaptainD 为啥是浪漫😂
jackOff
109 天前
不建议使用,至少最新 ide 都在提示不要使用 is 语法
ysc3839
109 天前
@jackOff 好像在哪看到,Python 的 is 应该只用于比较 None True False 等全局唯一的对象
kneo
108 天前
@CaptainD java 也是。相当于常量池。
iorilu
102 天前
真想确定对象是否是同一个, 还是用 id 把

除非是上面说的 is None 这种用法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1010306

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX