Python的__slots__实际做什么?

Learn how Python __slots__ reduces memory and boosts speed with real benchmarks from a data science project used in Allegro’s hiring challenge.

来源:KDnuggets
作者的图像| canva

如果有一种方法可以使您的Python代码更快? __slots__ in Python is easy to implement and can improve the performance of your code while reducing the memory usage.

__slots__

在本文中,我们将使用来自现实世界中的数据科学项目的工作方式,在那里,Allegro将其用作其数据科学招聘过程的挑战。但是,在我们进入这个项目之前,让我们对__ slots__做什么有深入的了解。

python中的__slots__是什么?

在Python中,每个对象都保留其属性的字典。这使您可以添加,更改或删除它们,但也以付出代价:额外的内存和较慢的属性访问。这是一个限制,但可以节省我们的时间。让我们看看一个例子。

class notslots:
    def __init __(自我,名称,年龄):
        self.name =名称
        self.age =年龄

与lots上课:
    __ slots__ = ['name','age']

    def __init __(自我,名称,年龄):
        self.name =名称
        self.age =年龄

在第二类中,__slots__告诉Python不要为每个对象创建一个字典。取而代之的是,它保留在内存中的固定位置,以获取名称和年龄值,从而使其更快并减少内存使用量。

为什么使用__slots__?

现在,在启动数据项目之前,让我们命名为什么要使用__slots__的原因。

    内存:当Python跳过创建字典时,对象占用更少的空间。Speed:访问值更快,因为Python知道每个值存储在哪里。Bugs:此结构避免使用静音错误,因为只有定义的漏洞。
  • 内存:当Python跳过创建字典时,对象占用更少的空间。
  • 速度:访问值更快,因为Python知道每个值存储在哪里。
  • 错误:此结构避免了静音错误,因为仅允许定义的错误。
  • 以Allegro的数据科学挑战为例

  • train_dataset.json
  • val_dataset.json