網頁

2015年7月6日 星期一

[Python] __slots__ 記憶體優化工具

主題: __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__指定的那些屬性名稱

沒有留言:

張貼留言