【发布时间】:2017-03-01 14:02:21
【问题描述】:
为了减少大型字典占用的内存空间,我将字典的结构从最初的 {string: boolean} 更改为 {int: boolean}。令我惊讶的是,字典使用的内存保持不变:
print(sys.getsizeof(myDictionary))
>140584
您能否向我解释一下为什么使用 int(大小为 24 字节)而不是字符串(至少 60 字节,由于我的数据类型可能更多)无助于减小整个字典的大小?是因为两者都已经链接到一个对象吗?
以下是字典的计算方式:
- 用于
{string: boolean}字典
myDictionary ={feat:(feat in item_feature_list) for feat in model_features_list}
- 用于
{int: boolean}字典
myDictionary = {int(i):(feat in item_feature_list) for feat, i in enumerate (model_features_list)}
谢谢。
【问题讨论】:
-
sys.getsizeof不会告诉您任何有关键和值的内存占用的信息,只告诉您字典本身。它随条目的数量而变化,而不是条目的性质。 -
Thx,那我如何监控整个字典使用的内存呢?
-
@MartijnPieters 字典保留散列,但必须保留键本身以在散列匹配(冲突)时比较键,对吗?在这种情况下,整数可能小于字符串。
-
@Jean-FrançoisFabre:哈希有固定大小,
int的哈希不小于str对象的哈希;它们都是数据结构中的 C 整数。 -
@Jean-FrançoisFabre 这不是工作方式。 Python 使用“备份”算法来计算备用槽。因此,如果在插入时发生冲突,它会使用备份算法,直到找到空槽。检索密钥时使用相同的过程。
标签: python python-3.x dictionary size