【问题标题】:Python Tuple Class MemoryPython 元组类内存
【发布时间】:2017-04-19 06:07:59
【问题描述】:

为什么在下面的对象中使用元组而不是列表会增加内存使用量?

from pympler.asizeof import asizeof


class myClass(object):
    __slots__ = ('l')
    def __init__(self, m):
        self.l = m

m = range(10)
ob = [myClass(m) for i in xrange(100000)]

print asizeof(ob)
for o in ob:
    o.l = tuple(o.l)
print asizeof(ob)

第一个大小为 64697936

第二个的大小为 200697784

【问题讨论】:

  • 大小有什么区别?显示输出。
  • 第一个大小为 64697936 第二个大小为 200697784
  • 你从哪里得到asizeof()
  • 从 pymler.asizeof 导入 asizeof
  • 所以粗略地说,它的空间大约是元组的 3 倍多一点。我知道元组是不可变的,这与数组不同

标签: python list class memory tuples


【解决方案1】:

在您的原始代码中,每个 myClass 实例都指向同一个列表。

>>> ob[0].l.append('foo')
>>> ob[1].l
['foo']

换句话说:您将一个列表的内存使用量与 100,000 个元组的内存使用量进行了比较。将其与 100,000 个列表进行比较:

for o in ob:
    o.l = list(o.l)

这些结果:

6424936
27224856

原文:

6424936
20024784

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多