Python‘==‘ 及 ‘is‘相关原理解析


Posted in Python onSeptember 05, 2020

'==' 比较的是两个对象的值

'is' 比较的是两个对象的内存地址(id)

下面我们着重理解 'is'。对于这个,我们需要知道:小整数对象池,大整数对象池,以及intern机制

小整数池:Python预先创建小整数缓存池—— [-5~256],无论创建多少个对象,都是指向同一个地址,这样是为了避免小整数频繁申请和释放内存。

>>> a=3
>>> b=3
>>> a is b
True
>>> 1+2 is 3
True

>>> a=1.0
>>> b=1.0
>>> a is b
False

大整数对象池:Python 提供了一个可扩展的内存空间,也叫通用整数对象池,谁需要用就给谁用,免去了申请内存。这个空间是一个PyIntBlock结构,是用一个单向列表连接一串内存(block),这个列表由 block_list 维护,而每个 block 维护一个 整数对象数组(Objects),用于存放被缓存的整数对象,即处于一个内存(block)的大整数是同一个对象。

>>> def func():
... a=10.1
... b=10.1
... return a is b
...
>>> func()
True

a和b的赋值都是由同一个通用整数池项获得的。

intern机制:Python的字符串类型中有一个 interned,它是一个记录字符串对象的字典,以此来保证这些字符串在内存中的唯一,相同值的字符串会使用同一个对象。

但是,只对由字母、数字、下划线组成的字符串做intern处理,而存在其他字符的字符串则不会。

>>> a='abc'
>>> b='abc'
>>> a is b
True

>>> a='ab c'
>>> b='ab c'
>>> a is b
False

此外,Python其他的数据类型如字典(dict)、列表(list)、集合(set)等,都是创建不同的对象

>>> a=[1,2,3]
>>> b=[1,2,3]
>>> a is b
False>>> a={'a':1}>>> b={'a':1}>>> a is bFalse>>>

补充一个,下面这种情况是因为上一个 [1,2,3]被回收了,在新建[4,5,6]时那片缓存又被用到了

>>> id([1,2,3]) == id([4,5,6])
True
>>> id([1,2,3])
36200264L
>>> id([4,5,6])
36200264L

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中Class类用法实例分析
Nov 12 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
python中实现精确的浮点数运算详解
Nov 02 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
基于Python中的yield表达式介绍
Nov 19 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
Python爬虫获取豆瓣电影并写入excel
Jul 31 Python
python中scrapy处理项目数据的实例分析
Nov 22 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 #Python
Python filter()及reduce()函数使用方法解析
Sep 05 #Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
Sep 05 #Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 #Python
Python实现快速大文件比较代码解析
Sep 04 #Python
基于python实现图片转字符画代码实例
Sep 04 #Python
Python HTMLTestRunner如何下载生成报告
Sep 04 #Python
You might like
php递归删除指定文件夹的方法小结
2015/04/20 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
PHP二维数组去重算法
2016/12/17 PHP
php实现的二分查找算法示例
2017/06/20 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
2017/05/20 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Django的session中对于用户验证的支持
2015/07/23 Python
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
华为菲律宾官方网站:HUAWEI Philippines
2021/02/23 全球购物
演讲稿开场白
2014/01/13 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
团干部培训方案
2014/06/03 职场文书
大学计划书范文800字
2014/08/14 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
玄武湖导游词
2015/02/05 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书