Python PYMPPLER asizeof vs sys.getsizeof

Python PYMPPLER asizeof vs sys.getsizeof,python,pickle,Python,Pickle,我有一份腌制过的文件。它的大小是9.3MB -rw-r--r-- 1 ankit ankit 9.3M Jan 7 17:43 agg_397127.pkl 我使用cPickle在python中加载它。我试着用Pypler asizeof确定它的大小。但是asize of和sys.getsizeof给出的大小有相当大的差异 from pympler import asizeof import cPickle as pickle path = "agg_397127.pkl" temp =

我有一份腌制过的文件。它的大小是9.3MB

-rw-r--r-- 1 ankit ankit 9.3M Jan  7 17:43 agg_397127.pkl
我使用cPickle在python中加载它。我试着用Pypler 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的格式必然不同于内存中实际对象的格式)