美文网首页
【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