首页 > 试题广场 >

简单解释Python的字符串驻留机制。

[问答题]
简单解释Python的字符串驻留机制。
字符串驻留定义:在计算机科学中,字符串驻留一种仅保存一份相同且不可变字符串的方法。不同的值被存放在字符串驻留池中。
字符串驻留限制仅包含下划线(_)、字母和数字的字符串会启用字符串驻留机制驻留。因为解释器仅对看起来像python标识符的字符串使用intern()方法,而python标识符正是由下划线、字母和数字组成。python只会针对整数范围为[-5, 256]的整数启用字符串驻留
字符串驻留机制的优缺点如下:
优点:能够提高一些字符串处理任务在时间和空间上的性能,
缺点:在创建或驻留字符串时的会花费更多的时间。

举例:string1 = “aabbcc”
           string2 =  “aabbcc”
使用id(string1)和id(string2)得到的内存地址是一样的。
编辑于 2018-09-27 10:31:32 回复(0)
- 字符串驻留是一种仅保存一份相同且不可变字符串的方法。
   - 原理
      - 系统维护interned字典,记录已被驻留的字符串对象。
      - 当字符串对象a需要驻留时,先在interned检测是否存在,若存在则指向存在的字符串对象,a的引用计数减1;
      - 若不存在,则记录a到interned中。
   - 优点
      - 在字符串比较时,节省大量内存。非驻留比较效率为o(n),驻留时比较效率为o(1)。
   - 驻留情况
      - 字符串只在编译时进行驻留,而非运行时。
      - 字符串长度为0和1时,默认都采用了驻留机制。
      - 字符串>1时,且只含大小写字母、数字、下划线时,才会默认驻留。
      - 用乘法得到的字符串
         - 乘数为1时
            - 仅含大小写字母、数字、下划线,默认驻留。
            - 含其他字符串
               - 长度<=1,默认驻留。
               - 长度>1,默认不驻留。
         - 乘数大于1时
            - 仅含大小写字母、数字、下划线,长度<=20,默认驻留
            - 仅含大小写字母、数字、下划线,长度>20,默认都不驻留
            - 其他字符串时,和长度无关,不驻留。
      - 字符串被sys.intern() 指定驻留。
      - [-5, 256]之间的整数数字,Python默认驻留。
发表于 2019-07-08 10:27:53 回复(0)
小整数池~
发表于 2018-11-02 17:06:55 回复(0)
-5~256
发表于 2018-09-27 07:35:12 回复(0)