python优化之-slot

当实例特别多的时候,达到百万级别时,使用slot可节省内存

  • 定义一个普通的类
class People():
	def __init__(self, name, sex, height, weight):
		self.name = name
		self.sex = sex
		self.height = height
		self.weight = weight
  • 使用slot的类
class PeopleSlot():
	__slots__ = ["name", "sex", "height", "weight"]
	def __init__(self, name, sex, height, weight):
		self.name = name
		self.sex = sex
		self.height = height
		self.weight = weight
  • 创建两个类的实例:

one = People(“Tim”, “male”, “180”, “78”)
two = PeopleSlot(“Alice”, “female”, “158”, “45”)

查看两个实例的属性:
在这里插入图片描述

在这里插入图片描述

  • 做差集,发现使用slot后的缺少了__dict__和__weakref__属性
    在这里插入图片描述

    • __weakref__只是一个不透明的对象,在不使用弱引用时,不占什么内存
      • 对于每个实例,如果没有变量,则定义的类__slots__不支持对其实例的弱引用。如果需要弱引用支持,则__weakref__在__slots__声明中添加到字符串序列。

使用,主要占内存的是__dict__

  • __dict__实现了实例的动态绑定,占用的一定的内存
  • 实例越多,one.__dict__占用的内存越大。
  • 下图操作步骤:
    • 查看one.__dict__中的内容
    • 查看one.__dict__占用的内存
    • one添加属性
    • 再次查看one.__dict__占用内存

在这里插入图片描述

  • 给使用了slot的实例,就不能添加属性

在这里插入图片描述

总结,实例很多时,可以使用__slots__ = []来定义

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值