V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zywscq
V2EX  ›  Python

浅谈 Python 字符串驻留技术

  •  
  •   zywscq · 98 天前 · 1839 次点击
    这是一个创建于 98 天前的主题,其中的信息可能已经有所发展或是发生改变。

    长度小于 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

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

    除非是上面说的 is None 这种用法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2962 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:08 · PVG 21:08 · LAX 06:08 · JFK 09:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.