详解python中is与==的适用场景

首先我们来分析一个问题,判断两个字符串是否相等?

>> a = "Hi"
>> b = "Hi"
>> a is b
True
>> a == b  # 我们会发现两个的结果一样
True

再看这个例子

>> a = "I am using long string for testing"
>> b = "I am using long string for testing"
>> a is b
False
>> a == b
True

通过id()查看变量在内存中具体的存储空间
第一个例子的两个变量存储空间相同,第二个不同。造成is的结果不一样。
官方文档对这is和==两种的描述:

is : object identity(对象标示符)
== : equal(相等)

a is b  调用的是id(a) == id(b)  判断两个对象在内存中是否拥有同一块内存空间
a == b 相当于a.__eq__(b),调用内部的__eq__方法。
了解了区别之后我们再来分析一下上面两个例子,都是字符串,为何结果却不一样?
  • 这是python中的string interning(字符串驻留)机制所决定的:对于较小的字符串,为了提高系统性能会保留其值的一个副本,当创建新的字符串的时候直接指向该副本。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,188评论 19 139
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 8,043评论 2 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,615评论 18 399
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,759评论 0 38
  • 昨晚跟男友吵架,又拨通了在上海的闺蜜和英国的闺蜜的电话。她们听着我在哭,急切地问我怎么了?我说我就是想你们了,我想...
    Yvonne_Rain阅读 2,767评论 0 0

友情链接更多精彩内容