• 小整数池以及字符串驻留机制


    小整数池:

    在[-5,256]这个区间的整数,在内存中仅仅会存放一份。

    举例说明:

    在python中,两次重复声明一个内容一样的变量的时候,其id( )是不一样的

     但是如果在声明整数的时候,数字是在[-5,256]这个区间的整数,其在内存中就仅仅存放了一份,所以id()是一样的

    但是仅仅限于整数,如果是小数则不会触发

     字符串驻留(intern)

    前面讲了小整数池,在一定范围内的整数,在内存中只会保存一份,所以导致了在[-5,256]范围的数字,就算用不同变量声明,内存中都是指向的同一个地址。
    同理,值同样的字符串对象也仅仅会保存一份,是共用的。(这也决定了字符串必须是不可变对象)

    但是同小整数池 有区间范围一样,字符串驻留机制也不是 对所有的字符串生效,仅仅是数字、字母或者下划线组成的字符串才存在intern机制

    (intern机制仅仅对那些看起来像是Python标识符的字符串对象才会触发)

    举例说明:

    注意的点:驻留时机 是在编译的时候驻留的,而不是在运行的时候驻留的

    举例说明:

     上述例子中,'ab'+'c'是在编译的时候求值的,而 变量b + 'c' 是在执行的时候求值的。由于驻留时机是在编译的时候产生,所以b + 'c' 并不会自动去intern

    驻留优缺点:

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

    1. python标识符的不可变性导致了字符串的改动不是采用replace,而是重新创建对象。为了节省内存,涉及到字符串的改动时通常用join()而非+。因为+会多次创建对象,而join()只创建一次对象。(不推荐使用+来拼接字符串,推荐使用join函数,因为join函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一次对象。)其实在比较少的字符串拼接用+反而效率更高,不过如果很多字符串拼接的话还是用join比较合适
    2. 驻留机制会提升一些时间和空间上的性能,但驻留对象也有所消耗。

    以上所有的测试结果都是在命令行中执行得到的,在一些工具中做了优化,比如在pycharm中 a=1000 b=1000  a is b  返回True,这是因为工具的优化导致的

  • 相关阅读:
    集群资源队列监控:Grafana
    1
    3月9号
    jmx
    日常笔记
    nsenter命令简介
    一天2小时
    postgresql Centos7部署
    笔记5
    1
  • 原文地址:https://www.cnblogs.com/alantammm/p/14481077.html
Copyright © 2020-2023  润新知