Python的字符串驻留机制

记录第一次写博客。

字符串驻留是一种在内存中仅保存一份相同且不可变字符串的方法。

Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。

基本原理:

系统维护interned字典,记录已被驻留的字符串对象。

当字符串对象a需要驻留时,先在interned检测是否存在,若存在则指向存在的字符串对象,a的引用计数减1;若不存在,则记录a到interned中。

采用Python驻留机制的时候有以下几种情况:

1、字符串长度为0或1时,默认采用驻留机制。

2、字符串长度大于1时,且字符串中只包含大小写字母、数字、下划线时,采用驻留机制。

3、字符串只在编译时进行驻留,而非运行时。Python是解释型语言,但是事实上,它的解释器也可以是理解为是一种编译器,它负责将Python代码翻译成字节码,也就是.pyc文件。

c是几个字符串的拼装,字符串的 .join() 方法是在运行期间才知道结果。所以c不支持字符串驻留。

4、用乘法得到的字符串,如果结果长度 <=20且字符串只包含数字、字母大小写、下划线,支持驻留。长度>20,不支持驻留。这样的设计目的是为了保护.pcy文件不会被错误代码搞的过大。

参考的文章是这样说的,但是我实际操作之后发现这条不成立。见图如下:

5、对于[-5,256]之间的整数数字,Python默认驻留

6、Pyhton提供intern方法强制2个字符串指向同一个对象。


参考链接:

                 http://guilload.com/python-string-interning/

                 https://blog.51cto.com/cnn237111/1615356

                 https://www.toutiao.com/i6540366167121330702/

                

你可能感兴趣的:(Python的字符串驻留机制)