全网整合营销服务商

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

免费咨询热线: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# 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小时内与您取得联系。