Python 缓冲区
转自:https://blog.csdn.net/pro_leo/article/details/41786397(有修订)
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都会帮我们缓存:
>>> 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 缓冲区的更多相关文章
- Python——缓冲区
原创声明:本文系博主原创文章,转载及引用请注明出处. 1. 在Python中,字符串和整型对象都是不可变的(immutable)类型,因此Python会很高效地缓存它们. 2. Python2.3简单 ...
- python 缓冲区 subprocess 黏包 黏包解决方案
一.缓冲区 二.两种黏包现象 两种黏包现象: 1 连续的小包可能会被优化算法给组合到一起进行发送 黏包现象1客户端 import socket BUFSIZE = 1024 ip_prort = (' ...
- Numpy系列(一)- array
初始Numpy 一.什么是Numpy? 简单来说,Numpy 是 Python 的一个科学计算包,包含了多维数组以及多维数组的操作. Numpy 的核心是 ndarray 对象,这个对象封装了同质数据 ...
- Lesson1——Tensor
Tensor Method 描述 is_tensor(obj) 如果 obj 是 PyTorch 张量,则返回 True : is_storage(obj) 如果 obj 是 PyTorch 存储对象 ...
- Python网络编程——修改套接字发送和接收的缓冲区大小
很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...
- python输出缓冲区的问题
碰到的问题,一段代码,print在前,log的在后,查看日志中log的反而在前面.是python输出缓冲区的问题. python输出缓冲区要满 4k 才写入文件,除非禁用缓存或者强制输出或者程序结束. ...
- python 读取二进制数据到可变缓冲区中
想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作.或者你想原地修改数据并将它写回到一个文件中去. 为了读取数据到一个可变数组中,使用文件对象的readinto() 方法.比如 im ...
- Python StringIO实现内存缓冲区中读写数据
StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的“文件”,我们可以像操作磁盘文件那样来操作StringIO.这篇文章主要介绍了Python StringIO模块,此模块 ...
- 后台运行python程序 遇到缓冲区问题
From: http://www.iteye.com/topic/867446 环境:linux 一段执行时间很长的程序(用python做hive客户端执行mapreduce) 在linux后台执行, ...
随机推荐
- 基于Redis主从复制读写分离架构的Session共享(Windows Server)
搭建主从复制 1.安装软件 下载Redis-x64-3.2.100.zip:https://github.com/MicrosoftArchive/redis/releases 第一步:将Redis拷 ...
- luogu 1064 金明的预算方案
01背包 变形,有主附件的背包内则更改决策 original: 1) 不选 2)选,f[j-w[i]]+v[i] now : 1)不选 2)选主 3)主 附1 4)主 附2 ...
- java操作Hbase
public class Test { public Connection connection; // 用HBaseconfiguration初始化配置信息是会自动加载当前应用的classpath下 ...
- 寻路优化(二)——二维地图上theta*算法的设计探索
这篇文章是基于上一篇文章的研究上进行的,使得路径更加的平滑和自然,特此记录.有错误欢迎大家批评指正.如需转载请注明出处,http://www.cnblogs.com/Leonhard-/p/68660 ...
- [HEOI2015]定价 (贪心)
分类讨论大法好! \(solution:\) 先说一下我对这个题目的态度: 首先这一题是贪心,这个十分明显,看了一眼其他题解都是十分优秀的贪心,可是大家都没有想过吗:你们贪心都是在区间\([l,r]\ ...
- C# 进程的挂起与恢复
1. 源起: 仍然是模块化编程所引发的需求.产品经理难伺候,女产品经理更甚之~:p 纯属戏谑,技术方案与产品经理无关,芋头莫怪! VCU10项目重构,要求各功能模块以独立进程方式实现,比如:音视频转换 ...
- Maven聚合工程的使用
创建一个service模块 接下来,在该项目中创建一个接口 创建一个实现类,并实现接口 在sm1234-web项目中,调用service的方法,需要在该项目的pom.xml中引入依赖Service模块 ...
- 基于神经网络的颜色恒常性—Fully Convolutional Color Constancy with Confidence-weighted Pooling
论文地址: http://openaccess.thecvf.com/content_cvpr_2017/papers/Hu_FC4_Fully_Convolutional_CVPR_2017_pap ...
- 【Eclipse】Eclipse中打开cmd窗口和terminal窗口
在IDEA的时候可以直接使用terminal打开类似于cmd窗口的功能,于是想着在eclipse也使用类似的功能. 1.Eclipse打开类似于cmd窗口的功能.(DOS) 1.window——> ...
- Linux设备驱动之Ioctl控制【转】
转自:http://www.cnblogs.com/geneil/archive/2011/12/04/2275372.html 大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力. ...