在 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# await 一个已经完成的Task会发生什么
建站之星如何助力企业快速打造五合一网站?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
如何通过宝塔面板实现本地网站访问?
,怎么在广州志愿者网站注册?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
七夕网站制作视频,七夕大促活动怎么报名?
如何撰写建站申请书?关键要点有哪些?
公司网站设计制作厂家,怎么创建自己的一个网站?
贸易公司网站制作流程,出口贸易网站设计怎么做?
建站之星代理如何获取技术支持?
如何在建站之星网店版论坛获取技术支持?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何在阿里云购买域名并搭建网站?
建站之星北京办公室:智能建站系统与小程序生成方案解析
如何在景安云服务器上绑定域名并配置虚拟主机?
大连 网站制作,大连天途有线官网?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何快速查询域名建站关键信息?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
教程网站设计制作软件,怎么创建自己的一个网站?
如何通过cPanel快速搭建网站?
建站之星2.7模板:企业网站建设与h5定制设计专题
如何通过网站建站时间优化SEO与用户体验?
如何快速搭建二级域名独立网站?
制作旅游网站html,怎样注册旅游网站?
个人网站制作流程图片大全,个人网站如何注销?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
公众号网站制作网页,微信公众号怎么制作?
如何快速配置高效服务器建站软件?
如何在阿里云香港服务器快速搭建网站?
为什么Go需要go mod文件_Go go mod文件作用说明
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
红河网站制作公司,红河事业单位身份证如何上传?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
已有域名如何免费搭建网站?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何在云指建站中生成FTP站点?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
SQL查询语句优化的实用方法总结
*请认真填写需求信息,我们会在24小时内与您取得联系。