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

时间:2014-06-27 15:33:37

标签: python memory

我想同时打印范围内所有变量的内存大小。

类似于:

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

但是在每个值之前有变量名,所以我可以看到我需要删除哪些变量或分成批次。

想法?

2 个答案:

答案 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