对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在windows下实现ping操作并接收返回信息的方法
Mar 20 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
May 14 Python
Python 通过URL打开图片实例详解
Jun 01 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
对numpy中的数组条件筛选功能详解
Jul 02 Python
python opencv实现图片旋转矩形分割
Jul 26 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
用Python实现校园通知更新提醒功能
Nov 23 Python
Python 2种方法求某个范围内的所有素数(质数)
Jan 31 Python
Pycharm最常用的快捷键及使用技巧
Mar 05 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下载远程图片函数 可伪造来路
2013/06/25 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
再论Javascript下字符串连接的性能
2011/03/05 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
js数组操作学习总结
2013/11/04 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
2019/02/02 NodeJs
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
python 实现堆排序算法代码
2012/06/05 Python
python多重继承新算法C3介绍
2014/09/28 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
2019/11/22 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
讲解员培训方案
2014/05/04 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
欠条格式范本
2015/07/03 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书
导游词之镜泊湖
2019/12/09 职场文书