使用__slots__ 来做内存优化

为何使用__slots__ :字典会占用大量内存,

如果一个类属性很少,但是它有很多实例对象,为了节省内存,可以使用__slots__ 来代替__dict__

当定义__slots__ 后,__slots__ 就会为实例使用一种更加紧凑的内部表示,这时就不会为每个实例都创建一个字典了。

__slots__ 的缺点:

1,使用它之后,就不能再给实例添加新属性了

2,而且也不再支持一个普通类所支持的特性了,比如,多继承。

 

所以:应该在一些经常使用到的数据结构的类中定义__slots__.例如:程序中需要创建某个类的几百万个实例对象。

还有的是,它也可以作为一个封装工具来防止用户给实例增加新的属性。但是它的主要用途还是内存优化。

提示: 它限制了__dict__属性字典的创建。它只是个内存优化工具,一般不使用它!

实例:

1 class DemoClass:
2     # __slots__ = "name"
3     __slots__ = ["name","age","qq","tel"] #定义多个用列表
4 
5 if __name__ == "__main__":
6     demo = DemoClass()
7     demo.name = "tom"
8     print(demo.name)
9     #print(demo.__dict__)  #报错:AttributeError: 'DemoClass' object has no attribute '__dict__'

转载于:https://www.cnblogs.com/zach0812/p/11310919.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值