对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 15 Python
python中list循环语句用法实例
Nov 10 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
Dec 21 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
python去除文件中重复的行实例
Jun 29 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
Python代码太长换行的实现
Jul 05 Python
Python中的 sort 和 sorted的用法与区别
Aug 10 Python
Python读取csv文件实例解析
Dec 30 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
Jul 13 Python
Django contrib auth authenticate函数源码解析
Nov 12 Python
python学习之panda数据分析核心支持库
May 07 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
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
BootStrap的双日历时间控件使用
2017/07/25 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
浅谈MySQL中的触发器
2015/05/05 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
python实现五子棋游戏
2019/06/18 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
python3多线程知识点总结
2019/09/26 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
介绍一下JNDI的基本概念
2013/07/26 面试题
百度JavaScript笔试题
2015/01/15 面试题
大学生简历中个人的自我评价
2013/10/06 职场文书
仓管员岗位职责范文
2013/11/08 职场文书
2014年变电站工作总结
2014/12/19 职场文书
师德先进个人材料
2014/12/20 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
python 判断字符串当中是否包含字符(str.contain)
2022/06/01 Python