首先,我們需要知道在python中哪些是可變資料型別,哪些是不可變資料型別。可變資料型別:列表list,字典dict和集合;不可變資料型別:整型int、浮點型float、字串型string和元組tuple(?這個有疑問)。
在講is和==這兩種運算子區別之前,首先要知道python中物件包含的三個基本要素,分別是:id(身份標識)、type(資料型別)和value(值)。
is和==都是對物件進行比較判斷作用的,但對物件比較判斷的內容並不相同。下面來看看具體區別在哪。
==比較操作符和is同一性運算子區別
==是python標準操作符中的比較操作符,用來比較判斷兩個物件的value(值)是否相等,例如下面兩個字串間的比較:
例1.
>>> a = 'cheesezh'>>> b = 'cheesezh'
>>> a ==b
true
is也被叫做同一性運算子,這個運算子比較判斷的是物件間的唯一身份標識,也就是id是否相同。通過對下面幾個list間的比較,你就會明白is同一性運算子的工作原理:
例2.
>>> x = y = [4,5,6]>>> z = [4,5,6]
>>> x ==y
true
>>> x ==z
true
>>> x isy
true
>>> x isz
false
>>>
>>> printid(x)
3075326572
>>> printid(y)
3075326572
>>> printid(z)
3075328140
前三個例子都是true,這什麼最後乙個是false呢?x、y和z的值是相同的,所以前兩個是true沒有問題。至於最後乙個為什麼是false,看看三個物件的id分別是什麼就會明白了。
下面再來看乙個例子,例3中同一型別下的a和b的(a==b)都是為true,而(a is b)則不然。
例3.
>>> a = 1 #a和b為數值型別>>> b = 1
>>> a isb
true
>>>id(a)
14318944
>>>id(b)
14318944
>>> a = 'cheesezh' #a和b為字串型別
>>> b = 'cheesezh'
>>> a isb
true
>>>id(a)
42111872
>>>id(b)
42111872
>>> a = (1,2,3) #a和b為元組型別
>>> b = (1,2,3)
>>> a isb
false
>>>id(a)
15001280
>>>id(b)
14790408
>>> a = [1,2,3] #a和b為list型別
>>> b = [1,2,3]
>>> a isb
false
>>>id(a)
42091624
>>>id(b)
42082016
>>> a = #a和b為dict型別
>>> b =
>>> a isb
false
>>>id(a)
42101616
>>>id(b)
42098736
>>> a = set([1,2,3])#a和b為set型別
>>> b = set([1,2,3])
>>> a isb
false
>>>id(a)
14819976
>>>id(b)
14822256
通過例3可看出,只有數值型和字串型的情況下,a is b才為true,當a和b是tuple,list,dict或set型時,a is b為false。
Python 可變與不可變資料型別
可變資料型別有 list和dict 不可變資料型別有 int,float,string和tupe 對於不可變資料型別 不允許值發生變化,如果改變了變數的值,必然會建立新的物件 小整數和string型別不適用 對於值相同的變數指向的記憶體位址是同乙個 對於string型別和256範圍內的int型別是這...
Python的可變與不可變資料型別
根據可變資料型別與不可變資料型別的概念,只需要在改變值的同時,使用id 函式檢視變數id值是否變化就可以知道這種資料型別是可變的還是不可變的了。在python中資料型別有 數字 整形,浮點型 字串,列表,字典,布林值,集合,元組。接下來我們用例子來一一檢視他們分別屬於不可變資料型別還是可變資料型別 ...
python的可變與不可變資料型別
首先,我們需要知道在python中哪些是可變資料型別,哪些是不可變資料型別。可變資料型別 列表list和字典dict 不可變資料型別 整型int 浮點型float 字串型string和元組tuple。初學python的時候,可能會有很多疑惑,尤其是最先接觸的所謂的 可變資料型別 和 不可變資料型別 ...