主題: __slots__
範例:
不使用__slots__優化記憶體(內部為一個hash table)
#!/usr/bin/python
from pympler import asizeof
class A(object):
#__slots__ = ['year', 'month', 'day']
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
a = A(1,2,3)
print asizeof.asized(a, detail=1).format()
<__main__ data-blogger-escaped-.a="" data-blogger-escaped-0x7f15e50e9cd0="" data-blogger-escaped-at="" data-blogger-escaped-object=""> size=552 flat=64
__dict__ size=488 flat=280
__class__ size=0 flat=0
使用__slots__優化記憶體(不存table, 分開以更節省記憶體的方式存)
#!/usr/bin/python
from pympler import asizeof
class A(object):
__slots__ = ['year', 'month', 'day']
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
a = A(1,2,3)
print asizeof.asized(a, detail=1).format()
<__main__ data-blogger-escaped-.a="" data-blogger-escaped-0x191f6c8="" data-blogger-escaped-at="" data-blogger-escaped-object=""> size=224 flat=72
__slots__ size=80 flat=80
month size=24 flat=24
day size=24 flat=24
year size=24 flat=24
__class__ size=0 flat=0
結論:
使用__slots__優化記憶體 552->224缺點就是因為內部不存hash table, 所以你也只能使用__slots__指定的那些屬性名稱
沒有留言:
張貼留言