为什么在下面的对象中使用元组而不是列表会增加内存使用量?
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
答案 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