(一)Python入門-3序列:17字典-核心底層原理-內存分析-存儲鍵值對過程


字典核心底層原理(重要)

  字典對象的核心是散列表。散列表是一個稀疏數組(總是有空白元素的數組),數組的 每個單元叫做 bucket。每個 bucket 有兩部分:一個是鍵對象的引用,一個是值對象的引 用。

  由於,所有bucket 結構和大小一致,我們可以通過偏移量來讀取指定 bucket。

    

一:將一個鍵值對放進字典的底層過程

    >>> a = {}

    >>>

    a["name"]="jack"

  假設字典 a對象創建完后,數組長度為 8:

    

  我們要把”name”=”jack”這個鍵值對放到字典對象 a 中,首先第一步需要計算 鍵”name”的散列值。Python 中可以通過hash()來計算。

  >>> bin(hash("name"))

  '-0b1010111101001110110101100100101'

  由於數組長度為 8,我們可以拿計算出的散列值的最右邊 3 位數字作為偏移量,即 “101”,十進制是數字 5。我們查看偏移量 5,對應的 bucket 是否為空。如果為空,則 將鍵值對放進去。如果不為空,則依次取右邊 3位作為偏移量,即“100”,十進制是數字4。再查看偏移量為 4 的 bucket 是否為空。直到找到為空的 bucket 將鍵值對放進去。流 程圖如下:

    

二:擴容

  python會根據散列表的擁擠程度擴容。“擴容”指的是:創造更大的數組,將原有內容 拷貝到新數組中。

  容量接近 2/3 時,數組就會擴容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM