字符串是否被缓存?

发布于 2021-01-29 18:20:05

>>> a = "zzzzqqqqasdfasdf1234"
>>> b = "zzzzqqqqasdfasdf1234"
>>> id(a)
4402117560
>>> id(b)
4402117560

>>> c = "!@#$"
>>> d = "!@#$"
>>> id(c) == id(d)
False
>>> id(a) == id(b)
True

为什么仅在分配字符串时才获得相同的id()结果?

编辑:我用“字符串”代替“ ASCII字符串”。感谢您的反馈

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这与ASCII与非ASCII无关(您的“非ASCII”仍然是ASCII,只是标点符号,而不是字母数字)。CPython作为实现细节,将仅包含“名称字符”的字符串常量进行实习。在这种情况下,“名称字符”与正则表达式转义的含义相同\w:字母数字加下划线。

    注意:这可以随时更改,并且永远不应依赖,这只是他们碰巧使用的一种优化。

    在猜测,这样的选择是优化代码,使用制造getattrsetattrdictS按少数字符串文字等,在实习意味着词典中查找涉及经常结束了做指针比较,避免在比较所有字符串(键入时两个字符串都被锁住,它们在定义上是相同的对象,或者不相等,因此可以避免完全读取它们的数据)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看