最近开始整理python的资料,博主建立了一个qq群,希望给大家提供一个交流的平台 78486745 。

is 和 ==,到底有什么区别?

问到 is 和 == 的区别时,很多同学往往都答不上来,搞不清两者什么时候返回一致,什么时候返回不一致。本文我们来看一下这两者的区别。

我们先来看几个例子:

a = "hello"
b = "hello"
print(a is b)  # 输出 True
print(a == b)  # 输出 Truea = "hello world"
b = "hello world"
print(a is b)  # 输出 False
print(a == b)  # 输出 True a = [1, 2, 3]
b = [1, 2, 3]
print(a is b)  # 输出 False
print(a == b)  # 输出 True a = [1, 2, 3]
b = a
print(a is b)  # 输出 True
print(a == b)  # 输出 True

上面的输出结果中为什么有的 is 和 == 的结果相同,有的不相同呢?我们来看下官方文档中对于 is 和 == 的解释。

官方文档中说 is 表示的是对象标示符(object identity),而 == 表示的是相等(equality)。is 的作用是用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样,而 == 是用来检查两个对象是否相等。

我们在检查 a is b 的时候,其实相当于检查 id(a) == id(b)。而检查 a == b 的时候,实际是调用了对象 a 的 eq() 方法,a == b 相当于 a.eq(b)。

一般情况下,如果 a is b 返回True的话,即 a 和 b 指向同一块内存地址的话,a == b 也返回True,即 a 和 b 的值也相等。
S

好了,看明白上面的解释后,我们来看下前面的几个例子。

a = "hello"
b = "hello"
print(id(a))   # 输出 140506224367496
print(id(b))   # 输出 140506224367496
print(a is b)  # 输出 True
print(a == b)  # 输出 Truea = "hello world"
b = "hello world"
print(id(a))   # 输出 140506208811952
print(id(b))   # 输出 140506208812208
print(a is b)  # 输出 False
print(a == b)  # 输出 True a = [1, 2, 3]
b = [1, 2, 3]
print(id(a))   # 输出 140506224299464
print(id(b))   # 输出 140506224309576
print(a is b)  # 输出 False
print(a == b)  # 输出 True a = [1, 2, 3]
b = a
print(id(a))   # 输出 140506224305672
print(id(b))   # 输出 140506224305672
print(a is b)  # 输出 True
print(a == b)  # 输出 True

打印出 id(a) 和 id(b) 后就很清楚了。只要 a 和 b 的值相等,a == b 就会返回True,而只有 id(a) 和 id(b) 相等时,a is b 才返回 True。

最近开始整理python的资料,博主建立了一个qq群,希望给大家提供一个交流的平台 78486745 。

延伸

那我们深入一步来思考一下下面这个问题:

Python里和None比较时,为什么是 is None 而不是 == None 呢?

这是因为None在Python里是个单例对象,一个变量如果是None,它一定和None指向同一个内存地址。而 == None背后调用的是__eq__,而__eq__可以被重载,下面是一个 is not None但 == None的例子

class Foo(object):def __eq__(self, other):return Truef = Foo()
print(f == None)  # 输出 True
print(f is None)  # 输出 False

总结

总结一下,is 是检查两个对象是否指向同一块内存空间,而 == 是检查他们的值是否相等。可以看出,is 是比 == 更严格的检查,is 返回True表明这两个对象指向同一块内存,值也一定相同。

看到这里,大家是不是搞懂了 is 和 == 的区别呢?

【搜索圆方圆,获得“python教程”,“python下载”,“python入门”类相关信息。】

Python经典面试题 之 is 和 == 的区别相关推荐

  1. 21道Python经典面试题,助你offer拿到手软!

    导读:又到"金九银十"招聘黄金季,21道Python经典面试题助你offer拿到手软,收好不谢! 01 Python如何实现单例模式? Python有两种方式可以实现单例模式,下面 ...

  2. python经典面试题100例 面试宝典

    人生苦短 我用 Python 芝麻开门! python 进阶 1 python 经典面试题 9 python 面试 100 例 21 python 面试题总结 101 python 进阶 1 PEP8 ...

  3. 经典面试题-元组和列表的区别

    本文引用自霍格沃兹测试开发学社录播课 经典面试题-元组和列表的区别 霍格沃兹测试开发 ceshiren.com 问题 面试官可能会问:Python 中元组和列表的区别是什么? 考察点分析 面试官主要的 ...

  4. 必读!53个Python经典面试题详解

    作者 | Chris 翻译 | 苏本如,编辑 | 夕颜 题图 | 视觉中国 出品 | AI科技大本营(ID:rgznai100) 本文列出53个Python面试问题,并且提供了答案,供数科学家和软件工 ...

  5. 用python画奥迪标志_不知道不 OK!53 个 Python 经典面试题详解

    作者 | Chris 翻译 | 苏本如,责编 | 夕颜 头图 | CSDN付费下载自视觉中国 出品 | CSDN(ID:CSDNnews) 以下为译文: 本文列出53个Python面试问题,并且提供了 ...

  6. 不知道不 OK!53 个 Python 经典面试题详解

    作者 | Chris 翻译 | 苏本如,责编 | 夕颜 头图 | CSDN付费下载自视觉中国 出品 | CSDN(ID:CSDNnews) 以下为译文: 本文列出53个Python面试问题,并且提供了 ...

  7. Python经典面试题:说说Python中xrange和range的区别?

    昨晚一小伙后台问xrange和range有啥区别,讲了下他倒领悟的挺快,其实这也是你各面试Python岗位,经常会遇到的Python面试题,长个心眼哈,说不定明年3月你找工作就用上了. 废话不多说,开 ...

  8. Python经典面试题100道(附PDF下载地址)

    最近肝了一个月,整理了下经典的 Python 经典习题 100 道,有基础的,也有进阶的,用习题来巩固知识点,不枯燥,为了方便大家查阅,我把这 100 道题整理成了 PDF 文档,大家可以下载到电脑或 ...

  9. python面试经典题_16道Python经典面试题及答案

    随着Python在企业中的应用越来越多,岗位需求越来越大,面试成为了搞定优质职位的快速方式,下面是笔者面试10余家企业总结的面试题,希望对Python从业者有帮助. 1.Python是如何进行内存管理 ...

最新文章

  1. Codeforces 797C Minimal string【贪心】
  2. 【Python基础】Python 流程控制专题总结
  3. C/C++——输入输出特别注意点
  4. 电商促销页面需要的辅助图形给设计师准备好了,拿走!
  5. AndroidStudio安卓原生开发_Activity的启动模式standard和一部分singleTop启动模式---Android原生开发工作笔记86
  6. 目前国内的语音识别技术是什么水准?
  7. 4、数据表的创建与更新
  8. 玩转华为ENSP模拟器系列 | 合集
  9. pdf文件解密去水印加书签
  10. 超级浏览器究竟是什么?
  11. oracle中min语句用法,oracle中的聚合函数count、max、min、sum、avg以及NVL函数的用法...
  12. 拉普拉斯金字塔图像融合原理
  13. inno setup 自定义生成的卸载程序
  14. 模拟电子技术------半导体
  15. 异形高清中英字幕资源
  16. commander入门教程及高级用法
  17. 今天向大家推荐一批大数据书籍,大家可以在业余的时候阅读,加深对大数据的了解
  18. 【Emmet 的使用手册(知识点超全版本)】
  19. 江苏省的计算机二级考试c语言
  20. 北京通信展的精华,都在这里!(上)

热门文章

  1. python 生成html文档_Python使用pyh生成HTML文档的方法示例
  2. java获取radio选中的值_获取radio值
  3. Python——找出以元音字母开头的单词
  4. 洗礼(BAPTISM)
  5. 三分钟了解APS系统中生产计划排程模块的基本原理!
  6. termius 链接树莓派显示乱码锟斤拷�⊠
  7. 计算机硬件听课教师评价,老师听课评语大全
  8. windwos下连接安卓模拟器的命令
  9. Navicat提示Access violation at address in module ‘navicate.exe‘. Read of address 0000000000000000
  10. ZESH | 2023春夏系列 尽享静谧诗意的东方之美