從Python對象三要素來看is和==的區別
Python對象三要素
Python對象包含三個基本要素id,type和value:
要素 | 說明 | 獲取方式 |
---|---|---|
id | 身份標識,基本就是內存地址 | id(obj) |
type | 數據類型 | type(obj) |
value | 值 |
is和==的區別
標識 | 名稱 | 判斷因素 |
---|---|---|
is | 同一性運算符 | id |
== | 比較運算符 | value |
舉例
例1
a = {"a":1, "b":2}
b = a.copy()
a == b # True value一樣
a is b # False id不一樣
- 1
- 2
- 3
- 4
- 5
例2
>>> 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)
>>> print id(y)
>>> print id(z)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
例3
>>> a = 1 #a和b爲數值類型
>>> b = 1
>>> a is b
True
>>> id(a)
>>> id(b)
>>> a = 'cheesezh' #a和b爲字符串類型
>>> b = 'cheesezh'
>>> a is b
True
>>> id(a)
>>> id(b)
>>> a = (1,2,3) #a和b爲元組類型
>>> b = (1,2,3)
>>> a is b
False
>>> id(a)
>>> id(b)
>>> a = [1,2,3] #a和b爲list類型
>>> b = [1,2,3]
>>> a is b
False
>>> id(a)
>>> id(b)
>>> a = {'cheese':1,'zh':2} #a和b爲dict類型
>>> b = {'cheese':1,'zh':2}
>>> a is b
False
>>> id(a)
>>> id(b)
>>> a = set([1,2,3])#a和b爲set類型
>>> b = set([1,2,3])
>>> a is b
False
>>> id(a)
>>> id(b)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
通過例3可看出,只有數值型和字符串型的情況下,a is b才爲True,當a和b是tuple,list,dict或set型時,a is b爲False。