8.4 我们可能会遇到程序创建了大量的实例(百万、千万级),会占用大量的内存
- 通常可以在类定义中增加slots属性,以此来大大减少对内存的使用
>>> class Date:
... __slots__=['year','month','day']
... def __init__(self,year,month,day):
... self.year=year
... self.month=month
... self.day=day
...
>>>
- 当定义了 slots属性时,python就会针对实例采用一种更紧凑的内部表示,不再让每个实例都创建一个dict字典
- 现在的实例是围绕着一个固定长度的小型数组来构建的,这和一个元组或者列表很相似。在slots中列出的属性名会在内部映射到这个数组的特定索引上来
- 使用slots带来的副作用是我们没法再对实例添加任何新的属性了,我们被限制为只允许使用slots中列出的那些属性名
网友评论