为什么使用__slots__可以更快地进行属性访问?

时间:2017-01-10 09:20:03

标签: python slots

这个问题:Usage of __slots__?答案__slots__可以让属性访问速度更快。但我想知道为什么?

当我们在课程中定义__slots__时会发生什么?

2 个答案:

答案 0 :(得分:3)

至于为什么 访问更快Guido talks about it here

  

特别是,为了使数据描述符正常工作,任何   操纵对象的属性首先需要检查对象的属性   类字典,看看该属性是否实际上是一个数据   描述。如果是,则描述符用于处理属性   访问而不是按原样手动操作实例字典   通常情况下。但是,这个额外的检查也意味着额外的   在检查每个字典之前执行查找   实例。因此,使用__slots__是优化查找的一种方法   数据属性 - 一个后备,如果你愿意的话,以防万一   对新课程系统的性能影响感到失望。

答案 1 :(得分:1)

来自文档(slots):

  

默认情况下,旧式和新式类的实例都有一个属性存储字典。这会浪费具有很少实例变量的对象的空间。在创建大量实例时,空间消耗会变得很严重。

     

可以通过在新样式类定义中定义__slots__来覆盖默认值。 __slots__声明采用一系列实例变量,并在每个实例中保留足够的空间来保存每个变量的值。保存空间是因为没有为每个实例创建__dict__

使用__slots__可以优化内存和性能。