对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中requests爬去网页内容出现乱码问题解决方法介绍
Oct 25 Python
Python字典数据对象拆分的简单实现方法
Dec 05 Python
快速查询Python文档方法分享
Dec 27 Python
matplotlib subplots 调整子图间矩的实例
May 25 Python
解析Python的缩进规则的使用
Jan 16 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
Python实现去除图片中指定颜色的像素功能示例
Apr 13 Python
TensorFlow实现简单的CNN的方法
Jul 18 Python
python有序查找算法 二分法实例解析
Feb 18 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
Django admin组件的使用
Oct 24 Python
python爬虫scrapy基本使用超详细教程
Feb 20 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 采集程序原理分析篇
2010/03/05 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
javascript中对对层的控制
2006/12/29 Javascript
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
JS+DIV+CSS实现的经典标签切换效果代码
2015/09/14 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
实例浅析js的this
2016/12/11 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
angular4中引入echarts的方法示例
2019/01/29 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
基于python实现百度翻译功能
2019/05/09 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
Order by的几种用法
2013/06/16 面试题
基层工作经历证明
2014/01/13 职场文书
九年级科学教学反思
2014/01/29 职场文书
初中生自我评价
2014/02/01 职场文书
信用卡工作证明模板
2014/09/14 职场文书
工作失职造成投诉的检讨书范文
2014/10/05 职场文书
大学生自荐书范文
2015/03/05 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
2015秋季田径运动会广播稿
2015/08/19 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
运动会主持人开幕词
2016/03/04 职场文书
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python