美文网首页
详解python中is与==的适用场景

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

作者: 成橙铖 | 来源:发表于2018-07-24 11:44 被阅读0次

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

    >> 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(字符串驻留)机制所决定的:对于较小的字符串,为了提高系统性能会保留其值的一个副本,当创建新的字符串的时候直接指向该副本。

    相关文章

      网友评论

          本文标题:详解python中is与==的适用场景

          本文链接:https://www.haomeiwen.com/subject/rneemftx.html