python сумма использования памяти каждой переменной - PullRequest
0 голосов
/ 09 апреля 2020

Мне нужно решить проблему, и я точно не знаю, как ее решить. У меня есть программа, которая имеет более 2 переменных. Каждая переменная занимает память (в байтах), и мне нужно вычислить сумму этих байтов (я думаю, что единственный способ - это использовать sys.getsizeof, ctypes.string_at и struct.unpack). Так, например

x1, y1, x2, y2 = map(int, input().split(" "))
if x1 > x2:
    resX = x1 - x2
    resY = y1 - y2
else:
    resX = x2 - x1
    resY = y2 - y1
k = int(resY/resX)
b = y1 - (k*x1)
if b > 0:
    print("y = {}x + {}".format(k, b))
else:
    print("y = {}x - {}".format(k, abs(b)))

Существует много переменных. Если я попытаюсь сделать это глупо, результат будет sys.getsizeof(x1) + sys.getsizeof(x2) + sys.getsizeof(x3) ... + sys.getsizeof(b). Но мне нужно написать функцию, которая будет считать сумму для каждого количества переменных. Во-первых, я не знаю, как разделять переменные (я думал о создании dict и вычислении использования памяти значений, но я все равно не знаю, как разделить переменные). Не могли бы вы дать мне совет? Эта задача очень специфична c, и я не нашел ничего о решении этой проблемы в Google. Повсюду программисты просто складывают каждое использование, как я показал выше. Поэтому я буду очень рад, если вы выскажете свои идеи по этому поводу. Спасибо

1 Ответ

0 голосов
/ 09 апреля 2020

Используйте locals() для получения переменных в текущей области:

import sys

x1, y1, x2, y2 = 1, 2, 3, 4  # map(int, input().split(" "))
if x1 > x2:
    resX = x1 - x2
    resY = y1 - y2
else:
    resX = x2 - x1
    resY = y2 - y1
k = int(resY/resX)
b = y1 - (k*x1)
if b > 0:
    print("y = {}x + {}".format(k, b))
else:
    print("y = {}x - {}".format(k, abs(b)))

local_variables = [(var, sys.getsizeof(obj)) for var, obj in locals().items() if not var.startswith('__') and var not in ['sys',]]
current_size = sum([size for var, size in local_variables])
print('Local variables and sizes: ', local_variables)
print('Total size of local variables:', current_size)

Вывод:

y = 1x + 1
Local variables and sizes:  [('b', 28), ('resY', 28), ('k', 28), ('y1', 28), ('y2', 28), ('x2', 28), ('resX', 28), ('x1', 28)]
Total size of local variables: 224
...