在講 is 和 == 這兩種運算符區別之前,首先要知道 Python 中對象包含的三個基本要素,分別是:id(身份標識)、type(數據類型)和value(值)
。
is 和 == 都是對對象進行比較判斷作用的,但對對象比較判斷的內容並不相同。下面來看看具體區別在哪。
== 比較操作符
和 is 同一性運算符
的區別如下。
== 是 python 標准操作符中的比較操作符,用來比較判斷兩個對象的 value(值) 是否相等.
例:
a = 'cheesezh'
b = 'cheesezh'
print(a == b)
輸出結果:
True
is 也被叫做同一性運算符,這個運算符比較判斷的是對象間的 唯一身份標識,也就是 id 是否相同。
例1:
>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>>
>>> print id(x)
3075326572
>>> print id(y)
3075326572
>>> print id(z)
3075328140
例2:is 的判斷結果和數據類型有關
>>> a = 1 #a和b為數值類型
>>> b = 1
>>> a is b
True
>>> id(a)
14318944
>>> id(b)
14318944
>>> a = 'cheesezh' #a和b為字符串類型
>>> b = 'cheesezh'
>>> a is b
True
>>> id(a)
42111872
>>> id(b)
42111872
>>> a = (1,2,3) #a和b為元組類型
>>> b = (1,2,3)
>>> a is b
False
>>> id(a)
15001280
>>> id(b)
14790408
>>> a = [1,2,3] #a和b為list類型
>>> b = [1,2,3]
>>> a is b
False
>>> id(a)
42091624
>>> id(b)
42082016
>>> a = {
'cheese':1,'zh':2} #a和b為dict類型
>>> b = {
'cheese':1,'zh':2}
>>> a is b
False
>>> id(a)
42101616
>>> id(b)
42098736
>>> a = set([1,2,3])#a和b為set類型
>>> b = set([1,2,3])
>>> a is b
False
>>> id(a)
14819976
>>> id(b)
14822256
總結:
通過例2可看出,當 a 和 b 值相同時,只有當他們是 數值型 和 字符串型 的情況下,a is b才為True;當 a 和 b 是 tuple,list,dict 或 set 型時,a is b 為False。
其他:
python 的 6 個基本數據類型
is 和 == 都可以進行對象比較判斷作用的,但對對象比較判斷的內容並不相同:
== 比較的是兩個對象的值是否相等,默認會調用對象的 eq 方法,== 是python標准操作符中的比較操作符,用來比較判斷兩個對象的值是否相等。
is 比較的是兩個對象的 id 是否相等,也就是比較兩個對象是否為同一個實例對象,是否指向同一個內存地址。