2017-04-19 32 views
0

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

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

有什么大小的区别?显示输出。 – MrJLP

+0

第一个大小为64697936 第二个大小为200697784 – user58925

+0

你从哪里得到'asizeof()'? – MrJLP

回答

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