【问题标题】:python sum of memory usage of every variablepython 每个变量的内存使用量总和
【发布时间】:2020-04-09 18:13:56
【问题描述】:

我需要解决一个问题,但我绝对不知道如何解决它。我有一个程序有两个以上的变量。每个变量都占用内存(字节),我需要计算这些字节的总和(我认为唯一的方法是使用 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 并计算值的内存使用量,但我真的不知道如何分隔变量)。 你能给我一个建议吗?这个任务非常具体,我在谷歌中没有找到任何关于解决这个问题的信息。无处不在的程序员只是像我上面展示的那样把每一个 uasge 加起来。 所以,如果你能说出你的想法,我会很高兴的。谢谢

【问题讨论】:

    标签: python variables memory memory-management task


    【解决方案1】:

    使用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
    

    【讨论】:

    • 非常感谢。你提高了我的技能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多