对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学习笔记(一)(基础入门之环境搭建)
Jun 05 Python
Python中的localtime()方法使用详解
May 22 Python
Python lxml模块安装教程
Jun 02 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
python 实现登录网页的操作方法
May 11 Python
Django中使用Celery的教程详解
Aug 24 Python
pytorch 转换矩阵的维数位置方法
Dec 08 Python
手把手教你使用Python创建微信机器人
Apr 29 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
Python如何获取文件路径/目录
Sep 22 Python
python matplotlib库的基本使用
Sep 23 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 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对文件进行加锁、解锁实例
2015/01/23 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
JavaScript数据类型检测代码分享
2015/01/26 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
Python Requests安装与简单运用
2016/04/07 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
Python3 使用cookiejar管理cookie的方法
2018/12/28 Python
python学生管理系统
2019/01/30 Python
python字符串Intern机制详解
2019/07/01 Python
简单了解python数组的基本操作
2019/11/26 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
python交互模式基础知识点学习
2020/06/18 Python
Python join()函数原理及使用方法
2020/11/14 Python
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
酒店司机岗位职责
2013/12/14 职场文书
年会活动策划方案
2014/01/23 职场文书
办公设备采购方案
2014/03/16 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
教师学期个人总结
2015/02/11 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/06 PostgreSQL