Python中is和==的区别详解


Posted in Python onNovember 15, 2018

Python中有很多运算符,今天我们就来讲讲is和==两种运算符在应用上的本质区别是什么。

在讲is和==这两种运算符区别之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。

is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪。

==比较操作符和is同一性运算符区别

==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等,例如下面两个字符串间的比较:

例1.

>>> a = 'cheesezh'
>>> b = 'cheesezh'
>>> a == b
True

is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个list间的比较,你就会明白is同一性运算符的工作原理:

例2.

>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>>
>>> print id(x)
3075326572
>>> print id(y)
3075326572
>>> print id(z)
3075328140

前三个例子都是True,这什么最后一个是False呢?x、y和z的值是相同的,所以前两个是True没有问题。至于最后一个为什么是False,看看三个对象的id分别是什么就会明白了。

下面再来看一个例子,例3中同一类型下的a和b的(a==b)都是为True,而(a is b)则不然。

例3.

>>> a = 1 #a和b为数值类型
>>> b = 1
>>> a is b
True
>>> id(a)
14318944
>>> id(b)
14318944
>>> a = 'cheesezh' #a和b为字符串类型
>>> b = 'cheesezh'
>>> a is b
True
>>> id(a)
42111872
>>> id(b)
42111872
>>> a = (1,2,3) #a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> id(a)
15001280
>>> id(b)
14790408
>>> a = [1,2,3] #a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> id(a)
42091624
>>> id(b)
42082016
>>> a = {'cheese':1,'zh':2} #a和b为dict类型
>>> b = {'cheese':1,'zh':2}
>>> a is b
False
>>> id(a)
42101616
>>> id(b)
42098736
>>> a = set([1,2,3])#a和b为set类型
>>> b = set([1,2,3])
>>> a is b
False
>>> id(a)
14819976
>>> id(b)
14822256

通过例3可看出,只有数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict或set型时,a is b为False。

感谢评论中凯风快晴同学的补充:

大家自己试试看a=257,b=257时它们的id还是否会相等。事实上Python 为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。而Python 对小整数的定义是 [-5, 257),只有数字在-5到256之间它们的id才会相等,超过了这个范围就不行了,同样的道理,字符串对象也有一个类似的缓冲池,超过区间范围内自然不会相等了。

总的来说,只有数值型和字符串型,并且在通用对象池中的情况下,a is b才为True,否则当a和b是int,str,tuple,list,dict或set型时,a is b均为False。

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

Python 相关文章推荐
一篇不错的Python入门教程
Feb 08 Python
解决Pycharm界面的子窗口不见了的问题
Jan 17 Python
python微信撤回监测代码
Apr 29 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
如何在Django配置文件里配置session链接
Aug 06 Python
python中文分词库jieba使用方法详解
Feb 11 Python
Numpy一维线性插值函数的用法
Apr 22 Python
python mysql中in参数化说明
Jun 05 Python
python实现斗地主分牌洗牌
Jun 22 Python
Python内置函数及功能简介汇总
Oct 13 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 Python
高考要来啦!用Python爬取历年高考数据并分析
Jun 03 Python
Python中垃圾回收和del语句详解
Nov 15 #Python
Matplotlib中文乱码的3种解决方案
Nov 15 #Python
Python使用sorted对字典的key或value排序
Nov 15 #Python
python并发和异步编程实例
Nov 15 #Python
Numpy截取指定范围内的数据方法
Nov 14 #Python
python numpy元素的区间查找方法
Nov 14 #Python
python爬虫之urllib库常用方法用法总结大全
Nov 14 #Python
You might like
php中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
javascript RadioButtonList获取选中值
2009/04/09 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
2017/01/14 Javascript
AngularJS中ng-class用法实例分析
2017/07/06 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
北大青鸟学生求职信
2013/09/24 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
婚育证明格式
2015/06/17 职场文书
推广普通话宣传标语口号
2015/12/26 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫