說說 Python 的對映資料型別

2021-10-24 13:15:27 字數 1622 閱讀 8641

mutable /ˈmjuːtəbl/

adj.

capable of or subject to change or alteration.

它們之間的類關係如下圖所示:

箭頭從子類指向父類,抽象類和抽象方法的名稱以斜體顯示。

這些介面定義了構建乙個對映型別所需要的介面與方法。

可以通過 isinstance() 方法來判定某個物件是不是廣義上的對映型別:

import collections

import logging

logging.basicconfig(level=logging.debug, format='%(levelname)s - %(message)s')

my_dict = {}

logging.info('result -> %s', result)

執行結果:

info - result -> true
python 標準庫里的所有對映型別都是利用 dict 來實現的,它們的鍵都必須是可雜湊的資料型別。

可雜湊的資料型別指的是:在這種資料型別物件的生命週期中,它的雜湊值是不變的。它會實現__hash__()方法與__qe__()方法,後一種方法是用來與其他鍵做比較。如果兩個物件的雜湊值相等,那麼就可以判定這兩個物件相等。

原子不可變的資料型別(如:str、bytes 和數值型別)都是可雜湊資料型別。frozenset 中只能容納可雜湊型別,因此也是可雜湊資料型別。

frozenset() 會返回乙個凍結的集合,凍結後集合不能再新增或刪除元素。

而元組比較特殊,只有當乙個元組中所包含的元素都是可雜湊型別時,它才是可雜湊的。luciano ramalho 舉了乙個示例來說明這一點。

tt = (1, 2, (30, 40))

logging.info('hash(tt) -> %s', hash(tt))

tf = (1, 2, frozenset([30, 40]))

logging.info('hash(tf) -> %s', hash(tf))

tl = (1, 2, [30, 40])

logging.info('hash(tl) -> %s', hash(tl))

執行結果:

info - result -> true

info - hash(tt) -> 8027212646858338501

info - hash(tf) -> 985328935373711578

typeerror: unhashable type: 'list'

示例中可以看到:元組內包含了乙個非雜湊的列表,就會丟擲 typeerror 異常。

一般情況下,使用者自定義型別的物件都是可雜湊的,雜湊值就是這些物件 id() 函式的返回值,因此這些物件在比較的時候都是不相等的。

date資料型別的正確格式 說說資料型別 上篇日期

excel內建了多種資料型別,我們今天簡單介紹一下日期這個型別。excel中,日期這一資料型別只能表示公元1900年1月1日開始到公元9999年12月31日為止的日期。不在此範圍內的日期,例如1898年的某一天,只能以文字這一資料型別表示,而不能以日期這一資料型別表示。不能表示有兩重意思 excel...

說說你所用過的Redis資料型別

string是簡單的 key value 鍵值對,value 不僅可以是 string,也可以是數字。string在redis內部儲存預設就是乙個字串,被redisobject所引用,當遇到incr,decr等操作時會轉成數值型進行計算,此時redisobject的encoding欄位為int。st...

Oracle 到 Hive 的資料型別對映

下表標識 oracle 資料型別 複製定義資料型別和 hive 資料型別 oracle 資料型別 複製定義資料型別 hive 資料型別 integer rs oracle decimal double number rs oracle decimal double number 10 number ...