zoukankan      html  css  js  c++  java
  • Python教程:缓冲区

    1、Python缓存作用:

      a、提高执行效率。

      b、减少内存负担。

    2、首先,我们看下面这一段code:

    >>> num1, num2 = 1, 1  
    >>> print num1 is num2  
    True  
    >>> id(num1), id(num2)  
    (3965416, 3965416)  
    >>> num3, num4 = 1.0, 1.0  
    >>> print num3 is num4  
    False  
    >>> id(num3), id(num4)  
    (22416168, 22416184)
    

    可以看到:num1和num2的值都是1,它们的内存地址也都是一致的;而num3和num4的值也都是1.0,但是它们的内存地址却不同。

    3、在Python中,字符串和整型对象都是不可变的(immutable)类型,因此Python会很高效地缓存它们。

    这样的处理机制能提升Python的性能。

    因此,我们看到下面示例中str1和str2也都是指向同一块内存地址:

    >>> str1, str2 = 'a', 'a'  
    >>> print str1 is str2  
    True  
    >>> id(str1), id(str2)  
    (22171104, 22171104)
    

    那么,是不是所有的整型和字符串Python都会帮我们缓存呢?答案是No。正如我们学习英语的时候并不需要记忆所有的单词,而是只选取了一些高频词汇。Python也采取这样的策略。我们会在下面的示例中看到并不是所有的整型和字符串Python都会帮我们缓存:

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    >>> num5, num6 = 300, 300  
    >>> print num5 is num6  
    False  
    >>> id(num5), id(num6)  
    (24972028, 24971416)
    >>> str3, str4 = 'abc', 'abc'  
    >>> print str3 is str4  
    False  
    >>> id(str3), id(str4)  
    (29674688, 29674656)</span>  
    

    4、Python能够帮我们缓存多少呢?

    Python2.3简单整数缓存范围是(-1,100),Python2.5.4以后简单整数缓存范围至少是(-5,256)。所有的短字符也都在缓存区。

    5、既然简单整型和单字符都能缓存,同样作为不可变类型的元组(tuple)能不能也能缓存呢?

    我们继续看下一组测试:

    >>> tuple1, tuple2 = (1, ), (1, )  
    >>> print tuple1 is tuple2  
    False  
    >>> id(tuple1), id(tuple2)  
    (24899856, 24756080)  
    >>> tuple3, tuple4 = (1, 2), (1, 2)  
    >>> print tuple3 is tuple4  
    False  
    >>> id(tuple3), id(tuple4)  
    (29705880, 24881752)</span>
    

    (PS:tuple1和tuple2在定义时声明为(1, ),这是因为在Python中符号()不仅仅是元组,它被重载为分组操作符,由圆括号()包裹的单一元素首先被当做分组操作,而不是元组)

    6、我们没有看到元组表现出缓存机制。

    这是为什么?因为缓存机制是为了解决数据快速存取的问题,简单整型和单字符都是较常使用的变量,而元组并没有常用元组一说,因此没有缓存机制也在情理之中。

  • 相关阅读:
    python 并发编程 多线程 event
    python 并发编程 多线程 定时器
    python 并发编程 多线程 信号量
    linux top 查看CPU命令
    python 并发编程 多线程 GIL与多线程
    python 并发编程 多线程 死锁现象与递归锁
    python 并发编程 多线程 GIL与Lock
    python GIL全局解释器锁与互斥锁 目录
    python 并发编程 多线程 GIL全局解释器锁基本概念
    执行python程序 出现三部曲
  • 原文地址:https://www.cnblogs.com/xxpythonxx/p/13531923.html
Copyright © 2011-2022 走看看