use*_*552 3 python dictionary set load-factor
我试图找出 Python 集的内部负载因子是多少。对于使用负载因子为 0.66 (2/3) 的哈希表的字典来说。存储桶的数量从 8 开始,当插入第 6 个键时,存储桶的数量增加到 16 下表显示了存储桶的变化。
| 桶 | 转移 | 
|---|---|
| 8 | 5 | 
| 16 | 10 | 
| 32 | 21 | 
| 64 | 42 | 
| 128 | 85 | 
这可以通过以下 Python 代码看出,其中字典和集合的大小通过 getsizeof 方法显示:
import sys
d = {}
s = set()
for x in range(25):
    d[x] = 1
    s.add(x)
    print(len(d), sys.getsizeof(d), sys.getsizeof(s))
| 元素数量 | 用于字典的内存 | 用于集合的内存 | 
|---|---|---|
| 1 | 第232章 | 216 | 
| 2 | 第232章 | 216 | 
| 3 | 第232章 | 216 | 
| 4 | 第232章 | 216 | 
| 5 | 第232章 | 728 | 
| 6 | 360 | 728 | 
| 7 | 360 | 728 | 
| 8 | 360 | 728 | 
| 9 | 360 | 728 | 
| 10 | 360 | 728 | 
| 11 | 640 | 728 | 
| 12 | 640 | 728 | 
| 13 | 640 | 728 | 
| 14 | 640 | 728 | 
| 15 | 640 | 728 | 
| 16 | 640 | 728 | 
| 17 号 | 640 | 728 | 
| 18 | 640 | 728 | 
| 19 | 640 | 2264 | 
| 20 | 640 | 2264 | 
| 21 | 640 | 2264 | 
| 22 | 第1176章 | 2264 | 
| 23 | 第1176章 | 2264 | 
| 24 | 第1176章 | 2264 | 
| 25 | 第1176章 | 2264 | 
上表显示桶中的移位正确的是针对字典的,而不是针对集合的。集合中的记忆是不同的。
我试图找出一组的负载系数是多少。这也是2/3吗?或者我的代码做错了什么?
目前,大约是3/5。查看来源:
if ((size_t)so->fill*5 < mask*3)
    return 0;
return set_table_resize(so, so->used>50000 ? so->used*2 : so->used*4);
fill是占用的表单元格数(包括“已删除条目”标记),并且mask比表总容量减 1。