簡體   English   中英

Python中某台的內載系數是多少

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM