对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中的异常处理相关语句基础学习笔记
Jul 11 Python
python用模块zlib压缩与解压字符串和文件的方法
Dec 16 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
python距离测量的方法
Mar 06 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
python flask 如何修改默认端口号的方法步骤
Jul 12 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
Feb 11 Python
django项目中新增app的2种实现方法
Apr 01 Python
浅析python函数式编程
Sep 26 Python
python利用faker库批量生成测试数据
Oct 15 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 header Content-Type类型小结
2011/07/03 PHP
PHP-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
Laravel 批量更新多条数据的示例
2017/11/27 PHP
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
Google AJAX 搜索 API实现代码
2010/11/17 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
javascript加载xml 并解析各节点的值(实现方法)
2016/10/12 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
详解基于webpack&gettext的前端多语言方案
2019/01/29 Javascript
详解搭建一个vue-cli的移动端H5开发模板
2020/01/17 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
JavaScript语法约定和程序调试原理解析
2020/11/03 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
基于python时间处理方法(详解)
2017/08/14 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
军训生自我鉴定范文
2013/12/27 职场文书
四好少年事迹材料
2014/01/12 职场文书
革命先烈的英雄事迹材料
2014/02/15 职场文书
建议书怎么写
2014/03/12 职场文书
公司业务员岗位职责
2014/03/18 职场文书
暑期培训心得体会
2014/09/02 职场文书
施工安全协议书
2016/03/22 职场文书
python处理json数据文件
2022/04/11 Python