在python中各个符号含义的汇总(详解Python中is和==的区别)
在python中各个符号含义的汇总
详解Python中is和==的区别在Python中一切都是对象。
Python中对象包含的三个基本要素,分别是:
- id(身份标识)
- type(数据类型)
- 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和==的区别详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
原文链接:https://www.cnblogs.com/moonhmily/p/10567354.html
- pythonflask编写接口(Python Flask框架模板操作实例分析)
- python怎么爬取excel数据(python爬取内容存入Excel实例)
- python数据类型基本知识入门(Python Pexpect库的简单使用方法)
- python线程池有几种(对python 多线程中的守护线程与join的用法详解)
- pythonwhile语句的原理(谈谈Python中的while循环语句)
- python把str转成list(python3 字符串/列表/元组str/list/tuple相互转换方法及join函数的使用)
- 用python3.5.3实现邮件收发(Python使用POP3和SMTP协议收发邮件的示例代码)
- 用python简单实现登录功能(使用python的pexpect模块,实现远程免密登录的示例)
- pythontime模块有哪些(Python3.5内置模块之time与datetime模块用法实例分析)
- python循环语句嵌套使用(Python分支语句与循环语句应用实例分析)
- python爬虫爬取知乎(详解用python写网络爬虫-爬取新浪微博评论)
- python后端生成的pdf文件(Python实现截取PDF文件中的几页代码实例)
- python最基本的编程工具(5款Python程序员高频使用开发工具推荐)
- opencv抠出边缘检测的图形(python opencv实现图像边缘检测)
- python怎么实现链表(Python实现数据结构线性链表单链表算法示例)
- pythonyield有什么用(彻底理解Python中的yield关键字)
- 经度,世界时间腕表的灵魂(世界时间腕表的灵魂)
- 阿里最新财报公布 三季度营收增长3 ,将增加150亿美元回购额度 在美股价小涨(阿里最新财报公布)
- 赵薇时胖时瘦 最近变美少女 原因在这里 躺着就变瘦(赵薇时胖时瘦最近变美)
- 学会这26种姿势,你就可以和兵哥哥切磋了(你就可以和兵哥哥切磋了)
- 吴彦祖陈冠希 恩怨 ,失去曾让他流泪的女友,终遇走过18年真爱(吴彦祖陈冠希恩怨)
- 痴情男神 吴彦祖 与妻子恋爱8年,结婚10年,家庭幸福美满(痴情男神吴彦祖)
热门推荐
- 织梦后台参数怎么设置才符合seo(详解织梦模板自定义表单限制IP24小时只能提交一次教程)
- css修饰文本的方法(CSS常用文本样式总结)
- zabbix监控网络线路(分布式监控系统之Zabbix 使用SNMP、JMX信道采集数据的原理解析)
- vue监控对象变化(Vue之监听方法案例详解)
- laravel框架学习心得教程(Laravel5.7 Eloquent ORM快速入门详解)
- C# string 和 stringbuilder 的区别
- laravel循环插入数据(Laravel 实现关系模型取出需要的字段)
- php实现无cookie的session(php实现多站点共用session实现单点登录的方法详解)
- dedecms系统参数设置(织梦dedecms首页调用指定栏目内容的标签详解)
- sql查询数据库前五条信息(SQL查询数据库中符合条件的记录的总数)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9