a = {}
a['key1'] = 1
a['key2'] = 6
del a ['key1']
python直譯器 執行 a ={}
python直譯器讀到這裡,比如會給5個連續的記憶體空間,有5個連續的記憶體位址,可以放資料
python直譯器 執行 a[『key1』] = 1
這裡,python直譯器會對key1進行雜湊運算,得到乙個十位進製的雜湊值,因為是5個位置,所以會對5取,就會得到0,1,2,3,4 五個位置,比如key1取餘得到 1 ,就會把值放進1位置上,這就叫雜湊位置對映也叫hashmap,但是會有一種情況,就是兩個key有可能算出一樣的雜湊值
python直譯器 執行a[『key123』] = 6
也有可能算出位置1,但是位置1被佔據了 ,這時候解析器會把key123雜湊出來的值,再加上key1的位置1,再進行雜湊,再取餘,就能得到乙個新位址,放進去。
刪除值呢?
比如刪除
python直譯器 執行 del a = [『key1』]
那麼在查詢a[『key123』]時候,因為雜湊出來的位置一樣,但是位置裡的內容為空,那麼會找不出值,傳送keyerror,如何解決?
刪除時候,不會真刪除,而是會在這個位置加上標記,此處有人來過,那麼就會再拿出這個位置的索引值,再進行一次雜湊,找到位置,就能找出這個準確的值了,這就是解決雜湊碰撞的方法。
字典的擴容,是一旦少於總容量的三分之一,就會進行擴容,位置重新排,因為總長度變了,如果資料量一旦大起來,就浪費很大的三分之一,這也是這套演算法的缺點之一,用空間換取時間。所以字典不能做大資料儲存。
Python字典物件實現原理
字典型別是python中最常用的資料型別之一,它是乙個鍵值對的集合,字典通過鍵來索引,關聯到相對的值,理論上它的查詢複雜度是 o 1 d d c 3 d 在字串的實現原理文章中,曾經出現過字典物件用於intern操作,那麼字典的內部結構是怎樣的呢?pydictobject物件就是dict的內部實現。...
Python字典物件實現原理
字典型別是python中最常用的資料型別之一,它是乙個鍵值對的集合,字典通過鍵來索引,關聯到相對的值,理論上它的查詢複雜度是 o 1 d d c 3 d 在字串的實現原理文章中,曾經出現過字典物件用於intern操作,那麼字典的內部結構是怎樣的呢?pydictobject物件就是dict的內部實現。...
Python字典的實現原理
python中的字典底層依靠雜湊表 hash table 實現,使用開放定址法解決衝突,雜湊表是key value型別的資料結構,可以理解為乙個鍵值需要按照一定規則存放的陣列,而雜湊函式就是這個規則 字典本質上是乙個雜湊表 總有空白元素的陣列,python至少保證1 3的陣列是空的 字典中的每個鍵都...