dict的性能遠(yuǎn)遠(yuǎn)高于list
在list中隨著數(shù)據(jù)量的增大,查找時(shí)間也會(huì)增大
在dict中隨著數(shù)據(jù)量的增大,查找時(shí)間不會(huì)增大
原因:
因?yàn)閐ict使用哈希表實(shí)現(xiàn)的,也就是散列表
哈希表是一個(gè)非常松散的數(shù)組,因?yàn)樗皇翘顫M的,要求留下空白的表元(就是一堆key和value組成的東西)
哈希表存儲(chǔ)原理:
dict中的key會(huì)調(diào)用內(nèi)置的hash()方法(如果是自定義的類(lèi)就會(huì)調(diào)用自定義的hash;),把hash()得到的新key作為 索引或者說(shuō)數(shù)組下標(biāo),找到位置把key和value的引用一起存入數(shù)組中
散列值和相對(duì)性
如果1==1.0 成立, 那么hash(1) == hash(1.0)也會(huì)成立
哈希表的查找:
因?yàn)楸举|(zhì)上是數(shù)組,所以通過(guò)偏移量就能查找到對(duì)應(yīng)的目標(biāo)
dict的優(yōu)缺點(diǎn):
1 key必須是可以哈希的
意味著key是不可變的
2 字典在內(nèi)存上花銷(xiāo)巨大
因?yàn)樯⒘斜碛写蟛糠质强瞻椎?,所以?dǎo)致它在空間上效率低下;
3 鍵的查詢(xún)很快
(本質(zhì)就是以空間換時(shí)間),如dict的特性:在dict中隨著數(shù)據(jù)量的增大,查找時(shí)間不會(huì)增大
4:鍵的次序取決于數(shù)據(jù)添加順序