1. 程式人生 > 其它 >Python學習4(字典的記憶體分佈)

Python學習4(字典的記憶體分佈)

1、字典:是python資料型別之一,字典通過花括號來包含資料項,字典的每個元素由2個部分組成,鍵:值,字典是根據鍵來找對應的值。

data = {"name": "Ethon", "age": 12, "address": "Shen zhen"}

2、字典的特點

  • 字典與列表、集合一樣,都是屬於可變資料型別

  • 字典和列表一樣,也能夠儲存多個數據

  • 鍵物件具有唯一性,因此只有不可變資料型別(數字,字串和元組)才能作為鍵鍵物件

  • 值物件可以為python的任意資料型別

3、字典的記憶體分佈

data = {"name": "Ethon", "age": 12, "address
": "Shen zhen"} print(data) # {'name': 'Ethon', 'age': 12, 'address': 'Shen zhen'}

 4、字典底層原理

字典物件的核心是散列表,散列表是一個稀疏陣列(總是有空白元素的陣列),陣列的每個單元叫做 bucket。每個 bucket 有兩部分:一個是鍵物件的引用,一個是值物件的引用。由於所有 bucket 結構和大小一致,我們可以通過偏移量來讀取指定 bucket。

4.1、鍵值的儲存過程

data = {}
data["name"] = "Ethon"
data["age"] = 12
data["address
"] = "Shen zhen" print(bin(hash("name"))) # -0b110101010110011100010010100000011000110000001101000100000111101 print(bin(hash("age"))) # 0b1001111110011010111111111010000010110010101000011000011100 print(bin(hash("address"))) # 0b100011011010010101010010100001110110010101001101100010000110011

1.首先要計算data["name"]的雜湊值

2.得到hash值後,我們從hash值最右邊3位數字作為偏離量,即"101"

3.我們檢視偏移量"101" 對應的bucket是否為空,如果為空,則將鍵值對放進去

4.如果不為空,則依次去右邊3位作為偏離量,即111"

5.再看偏離量"111" 對應的bucket是否為空,直到找到為空的bucket將鍵值對放進去。

4.2、字典查詢值的過程

1.我們要計算data["name"] 裡面的"name"物件

2.確定偏離量,雜湊值的最右邊3位數字作為偏離量 "101"

3.檢視偏離量"101"對應的bucket是否為空,如果為空,則返回None

4.如果不為空,則將這個bucket的鍵物件計算出對應的雜湊值和data["name"]的"name"雜湊值進行比較,如果兩個雜湊值相等,則將對應數組裡的值物件返回,如果不相等,則再依次取其他幾位數字,重新計算偏離量。依次取完,仍然沒有找到,則返回None。