gpt4 book ai didi

python - pympler asizeof 与 sys.getsizeof

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:37 34 4
gpt4 key购买 nike

我有一个 pickle 的锉刀。其大小为 9.3MB。

-rw-r--r-- 1 ankit ankit 9.3M Jan  7 17:43 agg_397127.pkl

我使用 cPickle 将其加载到 python 中。我尝试使用 pympler asizeof 确定其大小。但是asize of和sys.getsizeof给出的大小有相当大的差异

from pympler import asizeof
import cPickle as pickle
path = "agg_397127.pkl"
temp = pickle.load(open(path, 'rb'))
temp
{397127: RandomForestRegressor(bootstrap=True, criterion='band_predict',
max_depth=None, max_features='auto', max_leaf_nodes=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=1000, n_jobs=1,
oob_score=False, random_state=0, verbose=0, warm_start=False)}
asizeof.asizeof(temp)
1328504
asizeof.flatsize(temp)
import sys
sys.getsizeof(temp)
280

谁能解释一下为什么会有这样的差异?

最佳答案

sys.getsizeof() 返回传递给它的对象的大小 - 在您的示例中,这是一个只有一个条目的字典。它不包括字典引用的复杂类实例的大小,也不包括该实例引用的任何对象的大小。任何只有几个条目(在我的 Python 版本上最多 5 个)的字典都会返回完全相同的数字。

您正在使用的 assizeof 模块尝试递归地累加所有这些引用对象的大小。在这种情况下,考虑到返回的大小和 pickle 大小之间的巨大差异,它似乎做得不太好(但请注意,这些数字永远不会完全相等,因为磁盘上 pickle 的格式必然是与内存中实际对象的格式不同)。

关于python - pympler asizeof 与 sys.getsizeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34787327/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com