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 缓冲区相关推荐

  1. python缓冲区_如何在Python中使用Google的协议缓冲区

    python缓冲区 When people who speak different languages get together and talk, they try to use a languag ...

  2. ndarray python 映射_191123 使用 Pybind11 和 OpenCV 创建 Python 库

    参观飞机工厂不能让你学得流体力学,也不能让你学会开飞机.然而如果你会开飞机又懂流体力学,参观飞机工厂可以带给你最大的乐趣和价值.-- 侯捷 献给 @AliceInt-ZLJ by Knight @20 ...

  3. Python Imaging Library: ImagePath Module(图像路径模块)

    Python Imaging Library: ImagePath Module(图像路径模块) ImagePath模块用于存储和操作二维向量数据.路径对象可以在 ImageDraw 模块中传递方法. ...

  4. [转载] Python Numpy基础总结

    参考链接: Python中的numpy.hypot 目录 数组属性内存布局其他属性 数值类型dtype 常量创建数组创建0和1或指定数字填充的数组从现有数据创建数组创建范围数组创建重复元素数组创建随机 ...

  5. Python学习笔记第二十九天(N维数组(ndarray))

    Python学习笔记第二十九天 N维数组(ndarray) 构建阵列 索引阵列 ndarray的内部内存布局 阵列属性 内存布局 数据类型 其他属性 阵列接口 ctypes外部功能接口 Array方法 ...

  6. Python之缓存刷新

    Python之缓存刷新 有些童鞋写了python脚本在linux执行,发现pingt打印的内容并不是预想的一样直接输出,不能实时获取python脚本输出日志,而是在脚本执行完成后才输出,这是啥子原因呢 ...

  7. lisp语言是最好的语言_Lisp可能不是数据科学的最佳语言,但是我们仍然可以从中学到什么呢?...

    lisp语言是最好的语言 This article is in response to Emmet Boudreau's article 'Should We be Using Lisp for Da ...

  8. numpy创建三维空数组_numpy数组的创建和属性转换

    一.数据与numpy数组的创建 1. python数组的创建 python中的固定类型数组: python中提供了几种将数组存储在有效的.固定类型的数据缓存中的选项.内置的数组(array)模块可以创 ...

  9. [转载] 详解 Numpy.ndarray

    参考链接: Python中的numpy.ndarray.flat 向量.矩阵 & 多维数组是数值计算中必不可少的工具:通过对数组数据进行批量处理,避免了对数组元素显式地进行循环操作,这样做的结 ...

最新文章

  1. NVIDIA GPU上的随机数生成
  2. 房地产建筑行业HTML5模板
  3. Linux神器strace的使用方法及实践
  4. 看视频课程的正确方法
  5. c++中sort()的用法
  6. Spring讲解二:Spring中的Bean配置0
  7. CCF NOI1066 素数对
  8. 为什么C++静态static函数不能访问非静态成员
  9. 61.Linux/Unix 系统编程手册(下) -- SOCKET: 高级主题
  10. zepto在整个屏幕中左滑动右滑动
  11. opengl超级宝典(第5版)的环境搭建
  12. 机器视觉工业光源知识总结
  13. H3C Wx5004无线控制器修改SSID名称
  14. 经典的机器人入门资料
  15. android第三方拨号盘,android M拨号盘开源之旅(二)--- 浅析拨号盘主界面
  16. Android开发-简介(一)
  17. ubuntu美化及解决使用zsh后无法运行ROS
  18. 360度全景摄像是什么?360度全景摄像有什么用?
  19. Windows10下安装Centos7系统及常见问题
  20. open cv均值 中值 高斯 双边高斯 滤波及模糊

热门文章

  1. 剑指Offer(Java版):数字在排序数组中出现的次数
  2. linux之使用帮助
  3. iOS自定义的UISwitch按钮
  4. ASP.NETmvc常用JQUERY插件【jquery.dataTables.js】
  5. mysql varchar char text
  6. 【PM模块】维护业务处理流程—外部维护
  7. 七、【SAP-PM模块】信息系统 报表分析
  8. ALV通过F4事件,实现自定义搜索帮助F4
  9. SAP修改消息内容和报错类型(SE91和OBA5)
  10. SAP同一公司不同工厂间物料转储方案比较