详解Python中is和==的区别


Posted in Python onMarch 21, 2019

在Python中一切都是对象。

Python中对象包含的三个基本要素,分别是:

  1. id(身份标识)
  2. type(数据类型)
  3. value(值)

对象之间比较是否相等可以用 == ,也可以用 is 。

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

is 比较的是两个对象的id值是否相等,也就是比较两个对象是否为同一个实例对象,是否指向同一个内存地址。

== 比较的是两个对象的内容是否相等,默认会调用对象的 __eq__ 方法。

== 是python标准操作符中的比较操作符,用来比较判断两个对象的值是否相等。

先来看一个例子

>>> a = [1, 2, 3]
>>> b = a
>>> b is a 
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True

is 也被叫做同一性运算符,也就是id是否相同。

看下面代码, a和b变量的id不同, 所以 b == a 是True, b is a 是False.

再来看一下他们的id:

>>> id(a)
4364243328
>>> 
>>> id(b)
4364202696

哪些情况下 is 和 == 结果是完全相同的?

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a == b
True
>>> a = 1000
>>> b = 10**3
>>> a == b
True
>>> a is b
False
>>>

所以数字类型不完全相同。

那为什么256时相同, 而1000时不同呢?

因为出于对性能的考虑,Python内部做了很多的优化工作,对于整数对象,Python把一些频繁使用的整数对象缓存起来,保存到一个叫 small_ints 的链表中,在Python的整个生命周期内,任何需要引用这些整数对象的地方,都不再重新创建新的对象,而是直接引用缓存中的对象。

Python把这些可能频繁使用的整数对象规定在范围 [-5, 256] 之间的小对象放在 small_ints 中,但凡是需要用些小整数时,就从这里面取,不再去临时创建新的对象。

>>> c = 'miracle.young'
>>> d = 'miracle.young'
>>> c is d
False
>>> c == d
True
>>> c = 'miracleyoung'
>>> d = 'miracleyoung'
>>> c is c
True
>>> c == d
True

所以字符串类型不完全相同,这个和解释器实现有关。

>>> a = (1,2,3) # a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
>>> a = [1,2,3] # a和b为list类型
>>> b = [1,2,3]
>>> a is b
False
>>> a = {'miracle':100,'young':1} # a和b为dict类型
>>> b = {'miracle':100,'young':1}
>>> a is b
False
>>> a = set([1,2,3]) # a和b为set类型
>>> b = set([1,2,3])
>>> a is b
False

所以当变量是数字、字符串、元组,列表,字典时,is 和 == 都不相同, 不能互换使用!当比较值时,要使用 ==,比较是否是同一个内存地址时应该使用is。

当然,开发中比较值的情况比较多。

以上所述是小编给大家介绍的Python中is和==的区别详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python和php通信乱码问题解决方法
Apr 15 Python
Python实现的一个自动售饮料程序代码分享
Aug 25 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
Python requests模块session代码实例
Apr 14 Python
Python函数参数分类原理详解
May 28 Python
Python实现将元组中的元素作为参数传入函数的操作
Jun 05 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 Python
浅谈Python的条件判断语句if/else语句
Mar 21 #Python
python使用thrift教程的方法示例
Mar 21 #Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 #Python
详解python使用turtle库来画一朵花
Mar 21 #Python
python中import与from方法总结(推荐)
Mar 21 #Python
python批量创建指定名称的文件夹
Mar 21 #Python
python根据txt文本批量创建文件夹
Dec 08 #Python
You might like
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
php实现删除空目录的方法
2015/03/16 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
基于jquery插件编写countdown计时器
2016/06/12 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
Webpack中publicPath路径问题详解
2018/05/03 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
在类Unix系统上开始Python3编程入门
2015/08/20 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
python如何查看网页代码
2020/06/07 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
美国在线工具商店:Acme Tools
2018/06/26 全球购物
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
会计系中文个人求职信
2013/12/24 职场文书
大学生素质拓展活动方案
2014/02/11 职场文书
2014年度个人工作总结
2014/11/07 职场文书
2014年酒店服务员工作总结
2014/12/08 职场文书
道德模范事迹材料
2014/12/20 职场文书
自主招生英文自荐信
2015/03/25 职场文书
争做文明公民倡议书
2019/06/24 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
压缩Redis里的字符串大对象操作
2021/06/23 Redis
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python