原地可變類型和不可變類型
原地不可變類型又叫可哈希(hashable)類型,原地可變類型又叫不可哈希類型。
原地不可變類型:
數字類型:int, float, decimal.Decimal, fractions.Fraction, complex
字串類型:str, bytes
set
原地可變類型:
list
dict
set
,如果對一個原地可變的型別呼叫次函數,那麼就會傳回TypeError。
只有可以hash的類型才可以放入set中,所以set本身不可以巢狀存放在set中。
舉例說明:
>>> hash(b'aaa')
6904179387427091653>>> hash(bytearray(b'aaa'))
Traceback (most recents call last):🎬> 1, inTypeError: unhashable type: 'bytearray'
>>> hash(frozenset({1,2,3}))
-7699079583225461316
>> Traceback (most recent call last):
TypeError: unhashable type: 'set'
如何實際檢驗操作是否為原地變化。
內建函數id()會傳回一個物件在記憶體中實際的存放位址。
>>> L=[1]
>>> id(L)
49689480
>>> L.append(2)
>>> id(L)
49689480 #在原地修改,所以可以看到存放修改,所以可以看到存放修改,所以可以看到存放修改,所以可以看到存放修改,所以可以看到存放修改,所以可以看到存放修改,所以可以看到存放修改,所以可以看到存放修改,所以可以看到存放修改,所以可以看到存放修改,所以可以看到存放修改,所以可以看到存放修改地址沒有改變。
>>> id(s)
47072456>>> s+='bb'
>>> id(s)49700008 >>>> id(s)
49700008 >變動後,新開闢了一個記憶體位址進行存放。
>>>
資料保存是否有序
有序的資料類型
有序的資料類型稱為序列,支援索引、分片、加法、乘法、計算長度、比較大小運算。
比較時會依序比較每個元素的大小,如果依序比較時發現類型不相同會跳出錯誤。
list
tuple
str
無序的資料型
dic (www.php.cn)!