Cuando creamos objetos para clases, requiere memoria y los atributos se almacenan en forma de diccionario. En caso de que necesitemos asignar miles de objetos, tomará mucho espacio de memoria.
Las ranuras proporcionan un mecanismo especial para reducir el tamaño de los objetos. Es un concepto de optimización de la memoria en los objetos.
Ejemplo de objeto python sin ranuras:
class GFG(object): def __init__(self, *args, **kwargs): self.a = 1 self.b = 2 if __name__ == "__main__": instance = GFG() print(instance.__dict__)
Producción :
{'a': 1, 'b': 2}
Como todo objeto en Python contiene un diccionario dinámico que permite agregar atributos. Para cada objeto de instancia, tendremos una instancia de un diccionario que consume más espacio y desperdicia mucha RAM. En Python, no existe una funcionalidad predeterminada para asignar una cantidad estática de memoria al crear el objeto para almacenar todos sus atributos.
El uso de __slots__ reduce el desperdicio de espacio y acelera el programa asignando espacio para una cantidad fija de atributos.
Ejemplo de objeto python con ranuras:
class GFG(object): __slots__=['a', 'b'] def __init__(self, *args, **kwargs): self.a = 1 self.b = 2 if __name__ == "__main__": instance = GFG() print(instance.__slots__)
Producción :
['a', 'b']
Ejemplo de python si usamos dict :
class GFG(object): __slots__=['a', 'b'] def __init__(self, *args, **kwargs): self.a = 1 self.b = 2 if __name__ == "__main__": instance = GFG() print(instance.__dict__)
Producción :
AttributeError: 'GFG' object has no attribute '__dict__'
Este error será causado.
Resultado de usar __slots__:
- Acceso rápido a los atributos
- Ahorra espacio en la memoria
Publicación traducida automáticamente
Artículo escrito por Somil_singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA