Python元组类内存

时间:2017-04-19 06:07:59

标签: python list class memory tuples

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

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

1 个答案:

答案 0 :(得分:2)

在原始代码中,每个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