欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python 的字典(Dict)是如何存儲的

系統 1707 0

前言

Python 的字典有好多個名稱("映射"、"哈希"、"散列"或者"關系數組"),那你知道為什么字典會被稱為 Hash(翻譯為"哈希"或"散列")嗎?

你知道為什么字典對于鍵(Key)的存儲數據要求比較嚴格,但對于對應的值(Value)的存儲卻要求很寬松嗎?

讀完這篇文章,你將深刻理解這些問題背后的真相!

hash

首先我們來解釋一下什么是 Hash,來自維基百科:

散列函數(或散列算法,又稱哈希函數,英語:Hash Function)是一種從任何一種數據中創(chuàng)建小的數字“指紋”的方法。散列函數把消息或數據壓縮成摘要,使得數據量變小,將數據的格式固定下來。該函數將數據打亂混合,重新創(chuàng)建一個叫做散列值的指紋。散列值通常用來代表一個短的隨機字母和數字組成的字符串。好的散列函數在輸入域中很少出現散列沖突。在散列表和數據處理中,不抑制沖突來區(qū)別數據,會使得數據庫記錄更難找到。

世界上沒有兩片完全相同的樹葉,也沒有兩個相同的指紋,散列函數是用于從數據中創(chuàng)建小的數字指紋的方法。

我們看下圖示:

Python 的字典(Dict)是如何存儲的_第1張圖片

如圖,Python 調用內部的散列函數,將鍵(Key)作為參數進行轉換,得到一個唯一的地址(這也就解釋了為什么給相同的鍵賦值會直接覆蓋的原因,因為相同的鍵轉換后的地址是一樣滴),然后將值(Value)存放到該地址中。

對于 Python 來說,鍵(Key)必須是可哈希的,換句話說就是要可以通過散列函數計算出唯一地址的。那如果拿一個變量當鍵(Key)可以嗎?肯定不行。因為變量隨時都可能改變,不符合可哈希原則!

同樣的,列表、字典、集合這些都是可變的,所以都不能做為鍵(Key)來使用。

那有朋友可能會問,那元祖呢?元祖總該是不變的吧?

其實不然,因為元祖里邊可以存放列表這類可變因素,所以如果實在想拿元祖當字典的鍵(Key),那必須對元祖做限制:元組中只包括像數字和字符串這樣的不可變元素時,才可以作為字典中有效的鍵(Key)。

另外還需要注意的一點是,Python 的哈希算法對相同的值計算得到的結果是一樣的,也就是說 12315 和 12315.0 的值相同,他們被認為是相同的鍵(Key)。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久久一区二区 | 欧美成年| 国产成人精品日本亚洲麻豆 | 岛国在线123456 | 精品久久久久久一区二区 | 久久er热在这里只有精品85 | 国产一级毛片午夜福 | 日日操夜夜透 | 精品一卡2卡三卡4卡免费视频 | 欧美在线精品一区二区在线观看 | 一级片免费播放 | 成人性爱视频在线观看 | 日本视频在线免费 | 天天天插 | 一本大道久久a久久综合 | 欧洲怡红院| 亚洲九九 | 国产精品视频二区不卡 | 中文字幕在线观看av | 久草久视频| 欧美另类性视频 | 久久亚洲国产精品五月天婷 | 亚洲欧美中文字幕 | 国产欧美日韩在线播放 | 91短视频免费在线观看 | 亚洲色图在线视频 | 精品国产三级 | 国产综合亚洲精品一区二 | 日韩成人性视频 | 人人人人干 | 色综合久久综合网 | 精品亚洲一区二区三区 | 青娱乐激情视频 | 日韩一级大毛片欧美一级 | 香蕉一区 | 成人性视频免费网站 | 国产在线一区二区 | 色网站免费在线观看 | 999精品嫩草久久久久久99 | 99精品在线观看视频 | 色综合伊人色综合网亚洲欧洲 |