万级实例数量下,使用`__slots__`减少内存使用量

用途

Python 为每个对象实例创建一个 __dict__ 属性。这个字典用于存储实例的所有属性和方法。这种方式灵活但会消耗较多内存,因为每个实例都拥有一个独立的字典。

__slots__ 是 Python 类中用于定义类实例的固定属性的特殊属性。 如果使用 __slots__ 定义的属性,python 将使用一个固定大小的数组来存储属性,从而较少内存占用,提高属性访问速度。

用法

 1class Example:
 2    __slots__ = ("slot_0", "slot_1")
 3    
 4    def __init__(self):
 5        self.slot_0 = "zero"
 6        self.slot_1 = "one"
 7        
 8x1 = Example()
 9print(x1.slot_0)
10print(x1.slot_1)

在这个例子中,__slots__ 定义了两个固定的属性 slot_0 和 slot_1。这意味着 Example 类的实例只能有这两个属性,不能动态添加其他属性。

使用场景

__slots__ 是一个强大的优化工具,可以在需要大量对象实例时显著减少内存使用,并提高属性访问速度。 但是,它限制了对象的灵活性,因为你不能动态添加属性。在决定是否使用 __slots__ 时,需要权衡这些优缺点。