python使用__slots__类属性节省空间

定义__slots__类属性

  • 默认情况下,python中每个实例都用一个字典__dict__来存储所有的实例属性,但是由于字典底层是哈希表,是一种空间换时间的策略,如果程序中有非常多的实例,则内存消耗巨大。解决访问是使用__slots__类属性。
  • __slots__的原理是让解释器以元组的形式存储实例属性而非字典。
  • __slots__使用方法如下,在类中定义类属性__slots__的目的是告诉解释器,这里列出的是这个类的所有实例属性,请用元组来储存它们。

__slots__注意事项

  • 每个子类都要定义__slots__属性,因为解释器会忽略继承的__slots__属性
  • 实例只能拥有__slots__中列出的属性
  • 把__dict__加入__slots__可以实现动态添加属性,但是这样就与__slots__原本的目的背道而驰了。
  • 如果不把__weakref__加入__slots__,实例就不能作为弱引用的所指对象。
posted @ 2022-03-13 22:02  肖肖凯  阅读(57)  评论(0)    收藏  举报