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的Flask框架中使用模版的入门教程
Apr 20 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
Python3使用turtle绘制超立方体图形示例
Jun 19 Python
selenium+python 对输入框的输入处理方法
Oct 11 Python
python 去除二维数组/二维列表中的重复行方法
Jan 23 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
用Python实现BP神经网络(附代码)
Jul 10 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
Python是怎样处理json模块的
Jul 16 Python
Python如何在单元测试中给对象打补丁
Aug 03 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简单封装了一些常用JS操作
2007/02/25 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
单位办理社保介绍信
2014/01/10 职场文书
保密承诺书
2014/03/27 职场文书
法律专业自荐信
2014/06/03 职场文书
护士2014年终工作总结
2014/11/11 职场文书
入党积极分子考察意见
2015/06/02 职场文书
公司的力量观后感
2015/06/05 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏