对Python中小整数对象池和大整数对象池的使用详解


Posted in Python onJuly 09, 2019

1. 小整数对象池

整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。

Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,无论这个整数处于LEGB中的哪个位置,

所有位于这个范围内的整数使用的都是同一个对象。同理,单个字母也是这样的。

In [1]: a=-5

In [2]: b=-5

In [3]: a is b
Out[3]: True

In [4]: a=256

In [5]: b=256

In [6]: a is b
Out[6]: True

In [7]: a=1000

In [8]: b=1000

In [9]: a is b
Out[9]: False
intern机制处理空格一个单词的复用机会大,所以创建一次,有空格创建多次,但是字符串长度大于20,就不是创建一次了。
In [13]: a="abc"

In [14]: b="abc"

In [15]: a is b
Out[15]: True

In [16]: a="helloworld"

In [17]: b="helloworld"

In [18]: a is b
Out[18]: True

In [19]: a="hello world"

In [20]: b="hello world"

In [21]: a is b
Out[21]: False
 

s1 = "abcd"
s2 = "abcd"
print(s1 is s2)

s1 = "a" * 20
s2 = "a" * 20
print(s1 is s2)

s1 = "a" * 21
s2 = "a" * 21
print(s1 is s2)

s1 = "ab" * 10
s2 = "ab" * 10
print(s1 is s2)

s1 = "ab" * 11
s2 = "ab" * 11
print(s1 is s2)
# True
# True
# False
# True
# False

2.大整数对象池。说明:终端是每次执行一次,所以每次的大整数都重新创建,而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以

这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象。c1 和d1 处于一个代码块,而c1.b和c2.b分别有自己的代码块,所以不相等。

C1.b is C2.b
In [22]: a=1000

In [23]: b=1000

In [24]: a is b
Out[24]: False

In [25]: a=-1888

In [26]: b=-1888

In [27]: a is b
Out[27]: False

In [28]: 
c1 = 1000
d1 = 1000
print(c1 is d1) # True

class C1(object):
  a = 100
  b = 100
  c = 1000
  d = 1000


class C2(object):
  a = 100
  b = 1000


print(C1.a is C1.b) # True
print(C1.a is C2.a) # True
print(C1.c is C1.d) # True
print(C1.b is C2.b) # False

以上这篇对Python中小整数对象池和大整数对象池的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
使用Python绘制图表大全总结
Feb 11 Python
Python实现的科学计算器功能示例
Aug 04 Python
基于Django的ModelForm组件(详解)
Dec 07 Python
使用numpy和PIL进行简单的图像处理方法
Jul 02 Python
pandas中apply和transform方法的性能比较及区别介绍
Oct 30 Python
Ubuntu下Python2与Python3的共存问题
Oct 31 Python
详解python中sort排序使用
Mar 23 Python
eclipse创建python项目步骤详解
May 10 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
python数据预处理 :数据抽样解析
Feb 24 Python
python读取mnist数据集方法案例详解
Sep 04 Python
Python 旋转打印各种矩形的方法
Jul 09 #Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 #Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 #Python
Python3 执行系统命令并获取实时回显功能
Jul 09 #Python
利用python开发app实战的方法
Jul 09 #Python
python设置环境变量的作用和实例
Jul 09 #Python
python版百度语音识别功能
Jul 09 #Python
You might like
php unset全局变量运用问题的深入解析
2013/06/17 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
PHP静态成员变量
2017/02/14 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
javascript面向对象之二 命名空间
2011/02/08 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
python实现自主查询实时天气
2018/06/22 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
意大利网上药房:Farmacia 33
2020/01/27 全球购物
专业求职信撰写要诀
2014/02/18 职场文书
领导干部作风建设总结
2014/10/23 职场文书
党员倡议书
2015/01/19 职场文书
投资意向协议书
2015/01/29 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书
六一亲子活动感想
2015/08/07 职场文书
初中思品教学反思
2016/02/20 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis