上一篇文章讲到了__slots__减少内存的使用
namedtuple也是可以类似的事情,就是将class换成collections.namedtuple
具体代码如下:
from pympler.asizeof import asizesof
import collections
DaGongRen = collections.namedtuple('DaGongRen', ['id_dg', 'age','salary'])
#@profile
def test():
d= DaGongRen(10001,18,2000)
#d=[ DaGongRen(10001,18,2000) for i in range(100000) ]
#print(asizesof(d.__dict__))
print(asizesof(d))
if __name__ == '__main__':
test()
运行结果:
[aspiree1431 opt]# python lru_cache.py
(160,)
运行结果和上一篇进行对比,结果和__slots__差不多的:
方式 | 占用内存(字节) |
未优化 | 416 |
__slots__ | 152 |
namedtuple | 160 |
剩下的函数占用和上一篇类似的,这里就没去实验了
最后列一下前面的系列:
爱上python系列------python性能(八):__slots__减少内存的使用