我想同时打印范围内所有变量的内存大小。
类似于:
for obj in locals().values():
print sys.getsizeof(obj)
但是在每个值之前有变量名,所以我可以看到我需要删除哪些变量或分成批次。
想法?
答案 0 :(得分:29)
您可以使用.items()
from __future__ import print_function # for Python2
for var, obj in locals().items():
print(var, sys.getsizeof(obj))
答案 1 :(得分:23)
更多代码,但可以在Python 3中使用,并提供了易于理解的排序输出:
import sys
def sizeof_fmt(num, suffix='B'):
''' By Fred Cirera, after https://stackoverflow.com/a/1094933/1870254'''
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.6GiB
barcodes_sorted: 3.6GiB
barcodes_idx: 3.6GiB
barcodes: 3.6GiB
cbcs: 3.6GiB
reads_per_umi: 1.3GiB
umis_per_cbc: 59.1MiB
reads_per_cbc: 59.1MiB
_40: 12.1KiB
_: 1.6KiB