美文网首页
【Python符号】=,==,is差别在哪儿?

【Python符号】=,==,is差别在哪儿?

作者: 小宇宙e | 来源:发表于2019-01-15 13:01 被阅读0次

    作为一个python小白,在学习的初期道路上,总是遇到很多小坎坷。希望通过简书记录的方式,夯实基础,减少重复犯错。请大家一起多多交流学习。

    每每在需要比较大小或者判断变量内容是否相同的时候卡住。=, ==, is 到底有什么样的差别。

    首先,在Python中,一切都是对象(Object)。
    其次,Python中对象包含三个基本要素,ID(身份标识),Type(数据类型),Value(值)

    =:用于赋值,不用做比较
    ==:比较两个对象的内容是否相同(数值相等或者字符相同)
    is:比较两个对象的ID是否相同(是否指向同一个内存地址)

    Example1

    >>> a = [1, 2, 3]
    >>> b = a
    >>> b is a
    True
    >>> b == a
    True
    >>> id(a)
    4489883912
    >>> id(b)
    4489883912
    
    >>> c = [1, 2, 3]
    >>> d = [1, 2, 3]
    >>> d is c
    False
    >>> d == c
    True
    >>> id(c)
    4491242696
    >>> id(d)
    4491509128
    

    上例中a, b, c, d 四个变量的值都是相等的,但是只有a和b的ID是相同的,因为b是由a赋值得到的。在使用is进行判断时,由于ID不同,则得到False的结果。

    Example2

    >>> a = 256
    >>> b = 256
    >>> a is b
    True
    >>> a == b
    True
    
    >>> c = 1000
    >>> d = 1000
    >>> c is d
    False
    >>>c == d
    True
    

    此处a,b 变量ID相同是由于Python的对象缓存机制。Python将一些频繁使用的整数对象缓存起来,保存到一个叫small_ints的链表中,在Python的整个生命周期内,任何需要应用这些整数对象的地方,都不再创建新的对象,而是直接应用缓存中的对象。Python中定义的范围在[-5,256]。

    Example3

    >>> a = 'pythontab.com'
    >>> b = 'pythontab.com'
    >>> a is b
    False
    >>> a == b
    True
    
    >>> c = 'pythontabcom'
    >>> d = 'pythontabcom'
    >>> c is d
    True
    >>> c == d
    True
    

    显然是因为多了一个点导致不一样,解释是因为字符串类型不完全相同,与解释器实现有关(我还不是很明白这个原因)

    Example4

    # Tuple
    >>> a = (1,2,3)
    >>> b = (1,2,3)
    >>> a is b
    False
    
    # List
    >>> a = [1,2,3]
    >>> b = [1,2,3]
    >>> a is b
    False
    
    # Dict
    >>> a = {'python':100, 'com': 1}
    >>> a = {'python':100, 'com': 1}
    >>> a is b
    False
    
    # Set
    >>> a = set([1,2,3])
    >>> b = set([1,2,3])
    >>> a is b
    False
    

    可见,在变量是数字,字符串,元组,列表和字典时, is 与 = 的结果都不相同。

    参考资料(https://juejin.im/entry/5a3b62446fb9a0451f311b5c

    相关文章

      网友评论

          本文标题:【Python符号】=,==,is差别在哪儿?

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