[英]What is the internal load factor of a sets in Python
我試圖找出 Python 集的內部負載因子是多少。 對於使用負載因子為 0.66 (2/3) 的 hash 表的字典。 桶的數量從 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))
# 元素 | memory 用於聽寫 | memory 用於套裝 |
---|---|---|
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 |
上表顯示桶中正確的移位是針對字典的,而不是針對集合的。 集合中的 memory 不同。
我試圖找出一組的負載因子是多少。 那也是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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.