在python中一切都是物件。
python中物件包含的三個基本要素,分別是:id(身份標識)、type(資料型別)和value(值)。物件之間比較是否相等可以用==,也可以用is。
is和==都是對物件進行比較判斷作用的,但對物件比較判斷的內容並不相同。下面來看看具體區別在哪?
is比較的是兩個物件的id值是否相等,也就是比較兩個物件是否為同乙個例項物件,是否指向同乙個記憶體位址。
==比較的是兩個物件的內容是否相等,缺省會呼叫物件的__eq__()方法。
以下**在python3.5下測試通過。
==是python標準操作符中的比較操作符,用來比較判斷兩個物件的value(值)是否相等。
**1:
>>
> a =[1
,2,3
]>>
> b = a
>>
> b is a
true
>>
> b == a
true
>>
> b = a[:]
>>
> b is a
false
>>
> b == a
true
解釋一下為什麼?is也被叫做同一性運算子,也就是id是否相同。看下面**, a和b變數的id不同, 所以b==a是true, b is a 是false.
**2:
>>
>
id(a)
4364243328
>>
>
>>
>
id(b)
4364202696
**3:
>>
> a =
256>>
> b =
256>>
> a is b
true
>>
> a == b
true
>>
>
>>
> a =
1000
>>
> b =
10**
3>>
> a == b
true
>>
> a is b
false
>>
>
結論:數字型別不完全相同。
為什麼256時相同, 而1000時不同?
因為出於對效能的考慮,python內部做了很多的優化工作,對於整數物件,python把一些頻繁使用的整數物件快取起來,儲存到乙個叫small_ints的鍊錶中,在python的整個生命週期內,任何需要引用這些整數物件的地方,都不再重新建立新的物件,而是直接引用快取中的物件。python把這些可能頻繁使用的整數物件規定在範圍[-5, 256]之間的小物件放在small_ints中,但凡是需要用些小整數時,就從這裡面取,不再去臨時建立新的物件。
**4:
>>
> c =
'pythontab.com'
>>
> d =
'pythontab.com'
>>
> c is d
false
>>
> c == d
true
>>
> c =
'pythontabcom'
>>
> d =
'pythontabcom'
>>
> c is c
true
>>
> c == d
true
結論:字串型別不完全相同。這個和直譯器實現有關。
**5:
>>
> a =(1
,2,3
)#a和b為元組型別
>>
> b =(1
,2,3
)>>
> a is b
false
>>
> a =[1
,2,3
]#a和b為list型別
>>
> b =[1
,2,3
]>>
> a is b
false
>>
> a =
#a和b為dict型別
>>
> b =
>>
> a is b
false
>>
> a =
set([1
,2,3
])#a和b為set型別
>>
> b =
set([1
,2,3
])>>
> a is b
false
當變數是數字、字串、元組,列表,字典時,is和= =都不相同, 不能互換使用!當比較值時,要使用==,比較是否是同乙個記憶體位址時應該使用is。當然,開發中比較值的情況比較多。 Python中is和 的區別
python中的物件包含三要素 id type value。is判斷的是a物件是否就是b物件,是通過id來判斷的。也就是記憶體位址。其實本質就是判斷id a id b 當然也可以使用 判斷。但是必須是id a id b 而不是a b a 1,2,3 b 1,2,3 a is b false id a...
Python中「is」和「 」的區別
python有兩個用於相等比較的運算子,is 和 等於 在這篇文章中,我將帶你們了解python中 is 和 的區別,並通過幾個簡單地例子說明應該在什麼時候使用它們,我們先來看乙個情景 當我還是乙個孩子的時候,我們的鄰居家有兩隻雙胞胎貓。這兩隻貓看起來看起來完全一樣 同樣的木炭毛,同樣敏銳的綠眼睛。...
python中 is 和 的區別
python中的物件包含三要素 id type value 其中 id用來唯一標識乙個物件,type標識物件的型別,value是物件的值 is判斷的是a物件是否就是b物件,是通過id來判斷的 判斷的是a物件的值是否和b物件的值相等,是通過value來判斷的 最終取決於物件的 eq 方法,本質上兩個變...