全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python中is与==判断的区别

在 Python 中,比较两个对象(变量)是否相等,可以用 “is” 和 “==” 操作,但它俩有什么区别?什么时候用 “is”,什么时候用 “==” ?在面试时,发现不少候选人很难把这两者完全说清楚,因此在这篇文章中,「Python之禅」将对二者进行深入浅出的对比介绍。

先举个例子

小黄最近手头非常宽裕,花重金购买了一辆 P90D 特斯拉,我们暂且给这车取名叫 "小P" ,这辆车和隔壁老王家的车(车名叫 "小 王")是一模一样的,无论是型号、外表还是价格都一样,是同批次生产的。这里我们可以说 "小P" 和"小王"是两辆一模一样的、相等的( euqal ),但本质上这是两个不同的对象。有一天小君给他的爱车又取了一个网名叫 "爱驹",当我们说 "小P" 的时候其实就是在讨论 "爱驹",因为本质上两个名字指的是同一个对象,这里我们把 "小P" 和 "爱驹" 称为完全相等的( identical )。

在 Python 中,”==” 和 “is” 的区别可类比这个例子 ,前者是相等性比较,比较的是两个对象中的值是否相等,后者是一致性比较,比较的是两个对象的内存空间地址是否相同。

​显然,如果内存地址相同,那么他们的值肯定也是一样的,因此,如果 “is” 返回 True,那么 “==” 一定也返回 True,反之却不成立。

talk is cheap, show me the code

先创建一个列表对象,然后给它指定一个名字 a,再定义另外一个变量 b,让它指向同一个对象。

>>> a = [1, 2, 3]
>>> b = a

a 和 b 打印的值都是相等的,因为这两个变量指向的是同一个对象,就好比给一辆车起了两个不同的名字。

>>> a
[1, 2, 3]
>>> b
[1, 2, 3]

理所当然, is 和 == 都返回 True。

>>> a == b
True
>>> a is b
True

创建一个新的对象,尽管值是一样的,但是他们本质上是两个不同的对象,处在两个不同的内存空间,因此 "is" 返回的是 False。

>>> c = [1,2,3]
>>> a is c
False

有且当仅比较的两个变量指向同一个对象时 "is" 才返回 True,而 "==" 最终取决于对象的 __eq__() 方法,本质上两个变量进行 "==" 比较操作调用的是对象的 __eq__() 方法。例如:

>>> class Foo(object):
    def __eq__(self, other):
      return True

>>> f = Foo()
>>> f == 1
True
>>> f == None
True
>>> f is None
False

因为自定义类 Foo 的 eq 方法恒返回 True,因此它与任何对象进行 "==" 都是返回 True。而它与 None 是两个不同的对象,因此 'is' 操作返回的是 False。

最后请大家思考这段代码,为什么同样的操作会有不同的结果

>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = 123
>>> b = 123
>>> a is b
True

总结:

如果你要比较两个值是否相同就用==,如果比较是否是同一个对象就用is.

其实python中的is比较的对象很像C语言中的指针,只有地址相同的指针才是同一个指针.


# python  # is  # ==  # 区别  # 一文读懂Python的’=='和’is’用法  # 一文搞懂Python中is和==的区别  # Python中is与==的使用区别详解  # Python之is与==的区别详解  # Python中对象的比较操作==和is区别详析  # Python‘==‘ 及 ‘is‘相关原理解析  # 详解Python中is和==的区别  # Python中is和==的区别详解  # Python中的is和==比较两个对象的两种方法  # Python中关键字is与==的区别简述  # Python中 is 和 ==的区别使用小结  # 的是  # 本质上  # 都是  # 什么时候  # 就用  # 创建一个  # 它与  # 小王  # 这是  # 他们的  # 会有  # 很难  # 才是  # 你要  # 在这  # 是一样的  # 可以说  # 可以用  # 请大家  # 这段 


相关文章: 南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  网站企业制作流程,用什么语言做企业网站比较好?  C#如何使用XPathNavigator高效查询XML  如何选择靠谱的建站公司加盟品牌?  如何快速上传自定义模板至建站之星?  制作证书网站有哪些,全国城建培训中心证书查询官网?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  智能起名网站制作软件有哪些,制作logo的软件?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  教学网站制作软件,学习*后期制作的网站有哪些?  如何在阿里云虚拟主机上快速搭建个人网站?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  建站之星免费模板:自助建站系统与智能响应式一键生成  制作网站的公司有哪些,做一个公司网站要多少钱?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  如何正确选择百度移动适配建站域名?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何快速搭建高效服务器建站系统?  建站主机如何安装配置?新手必看操作指南  网站代码制作软件有哪些,如何生成自己网站的代码?  如何在云指建站中生成FTP站点?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  如何选择高效响应式自助建站源码系统?  建站之星CMS五站合一模板配置与SEO优化指南  焦点电影公司作品,电影焦点结局是什么?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  C#怎么使用委托和事件 C# delegate与event编程方法  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  网站按钮制作软件,如何实现网页中按钮的自动点击?  网站制作企业,网站的banner和导航栏是指什么?  重庆市网站制作公司,重庆招聘网站哪个好?  建站主机与服务器功能差异如何区分?  如何在云主机快速搭建网站站点?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  网站制作公司排行榜,四大门户网站排名?  如何通过宝塔面板实现本地网站访问?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  建站之星会员如何解锁更多建站功能?  如何选择适合PHP云建站的开源框架?  专业网站建设制作报价,网页设计制作要考什么证?  已有域名能否直接搭建网站?  如何在云服务器上快速搭建个人网站?  Bpmn 2.0的XML文件怎么画流程图  视频网站app制作软件,有什么好的视频聊天网站或者软件? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。