2017-04-19 62 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