Python- как отображать размер всех переменных

Я хочу одновременно печатать объем памяти всех переменных в моей области.

Нечто похожее на:

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

Но с именами переменных перед каждым значением, чтобы я мог видеть, какие переменные мне нужно удалить или разбить на партии.

Идеи?

Ответ 1

Вы можете перебирать и ключ, и значение словаря, используя .items()

from __future__ import print_function  # for Python2
for var, obj in locals().items():
    print(var, sys.getsizeof(obj))

Ответ 2

Немного больше кода, но работает в Python 3 и дает отсортированный, читаемый человеком результат:

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