Python-如何显示所有变量的大小

我想同时打印作用域中所有变量的内存大小。

类似于:

for obj in locals().values():
print sys.getsizeof(obj)

但是在每个值之前加上变量名,这样我就可以看到哪些变量需要删除或拆分成批。

有什么想法吗?

53736 次浏览

可以使用 .items()迭代字典的键和值

from __future__ import print_function  # for Python2
import sys


local_vars = list(locals().items())
for var, obj in local_vars:
print(var, sys.getsizeof(obj))

更多的代码,但是可以在 Python3中工作,并提供一个经过排序的、人类可读的输出:

import sys
def sizeof_fmt(num, suffix='B'):
''' by Fred Cirera,  https://stackoverflow.com/a/1094933/1870254, modified'''
for unit in ['','Ki','Mi','Gi','Ti','Pi','Ei','Zi']:
if abs(num) < 1024.0:
return "%3.1f %s%s" % (num, unit, suffix)
num /= 1024.0
return "%.1f %s%s" % (num, 'Yi', suffix)


for name, size in sorted(((name, sys.getsizeof(value)) for name, value in locals().items()),
key= lambda x: -x[1])[:10]:
print("{:>30}: {:>8}".format(name, sizeof_fmt(size)))

输出示例:

                  umis:   3.6 GiB
barcodes_sorted:   3.6 GiB
barcodes_idx:   3.6 GiB
barcodes:   3.6 GiB
cbcs:   3.6 GiB
reads_per_umi:   1.3 GiB
umis_per_cbc:  59.1 MiB
reads_per_cbc:  59.1 MiB
_40:  12.1 KiB
_:   1.6 KiB