zoukankan      html  css  js  c++  java
  • python字符串驻留(intern)机制

    进阶之python字符串驻留(intern)机制

    字符串驻留机制
    对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。长字符串不遵守驻留机制。
    驻留适用范围
    由数字,字符和下划线(_)组成的python标识符以及整数[-5,256]。
    实例1:

    >>> str1='jiumo'
    >>> str2='jiumo'
    >>> str1 is str2
    True
    >>> id(str1)
    1979078421896
    >>> id(str2)
    1979078421896
    

    实例2:

    >>> str3='jiumo wbw'
    >>> str4='jiumo wbw'
    >>> str3 is str4
    False
    >>> id(str3)
    1979078402432
    >>> id(str4)
    1979078403832
    

    可以看出非数字,字符和下划线(_)组成的字符串并不会触发驻留。python中用is可以比较两个字符串是否是同一个对象,也就是内存地址是否一样。
    驻留时机
    python中的驻留发生在compile_time,而不是run_time。
    实例3:

    >>> str1='jiu'+'mo'
    >>> str1 is 'jiumo'
    True
    >>> str3='jiu'
    >>> str4=str3+'mo'
    >>> str4 is 'jiumo' 
    False
    

    优缺点

    字符串驻留机制的优缺点如下:
    优点:能够提高一些字符串处理任务在时间和空间上的性能,
    缺点:在创建或驻留字符串时的会花费更多的时间。

    1. python标识符的不可变性导致了字符串的改动不是采用replace,而是重新创建对象。为了节省内存,涉及到字符串的改动时通常用join()而非+。因为+会多次创建对象,而join()只创建一次对象。
    2. 驻留机制会提升一些时间和空间上的性能,但驻留对象也有所消耗。

    注意事项

    1、连接字符串
    由于字符串的改动不是inplace的操作,需要新建对象,因此不推荐使用+来拼接字符串,推荐使用join函数,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。

    2、字符串驻留限制

    仅包含下划线(_)、字母和数字的字符串会启用字符串驻留机制驻留机制。因为解释器仅对看起来像python标识符的字符串使用intern()方法,而python标识符正是由下划线、字母和数字组成。

  • 相关阅读:
    简易温控器的开发
    信号处理电路1:差动转单端输出电路计算于分析
    电容触摸屏资料适合7寸30PINS
    TI Motor Control
    AD规则实例1元件keepout层与覆铜间距
    Python基础语法
    Python基本运算符
    Python 字符串
    javascript>getElementsByClass
    thrift多平台安装
  • 原文地址:https://www.cnblogs.com/jiumo/p/10471352.html
Copyright © 2011-2022 走看看