python字典中的探测如何工作? [复制]

Posted

技术标签:

【中文标题】python字典中的探测如何工作? [复制]【英文标题】:How probing works in python dictionary? [duplicate] 【发布时间】:2018-12-14 18:53:30 【问题描述】:
my_dict = 
my_dict["qwerty"]  = "some_value"
my_dict[114378642] = "some_other_value"

上面的代码包含一个包含两个键的python字典,其中第一个键是字符串类型,第二个键是整数类型。尽管两个键的类型不同,但它会产生相同的哈希,即

hash("qwerty") = 114378642
hash(114378642) = 114378642

因此,

hash("qwerty") == hash(114378642)    #True

直到现在才得到正确的答案,

首先,我的印象是“只有两个相似的对象 产生相同的哈希”。

其次,python字典如何执行碰撞恢复 上述情况?

最后,python字典的初始容量是多少 在第一行代码?

【问题讨论】:

“我的印象是只有两个相似的对象会产生相同的哈希”——你的印象是错误的。所有基于散列的容器都必须能够应对散列冲突。 @khelwood - 正确,那些我通常称之为桶的哈希容器需要使用双重哈希或其中一种探测技术来执行冲突恢复。所有探测算法都需要容器/桶容量。你能帮我知道python dict的初始容量是多少吗? 【参考方案1】:

hash() 产生与您输入的 int 值相同的结果,这并不奇怪。

>>> for i in range(10) : print i, hash(i)
... 
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9

字典使用different hashing 来存储它们的值。

【讨论】:

(*除了hash(-1)) 这不是真的。 hash(x) 其中 x 是一个整数,仅当 x

以上是关于python字典中的探测如何工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python 字典(内置哈希表)是如何实现的? [复制]

为啥我在 python 中的字典总是有序的? [复制]

如何按字典中的值对字典列表进行排序? [复制]

Python中的深浅拷贝,赋值及引用

如何识别嵌套字典中的最高值键? [复制]

使用未定义的变量作为python中的字典键