在 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小时内与您取得联系。