¿Qué es más eficiente en Python en términos de uso de memoria y consumo de CPU: diccionario u objeto?
Antecedentes: tengo que cargar una gran cantidad de datos en Python. Creé un objeto que es solo un contenedor de campo. Crear instancias de 4M y ponerlas en un diccionario tomó aproximadamente 10 minutos y ~ 6GB de memoria. Una vez que el diccionario está listo, acceder a él es un abrir y cerrar de ojos.
Ejemplo: para verificar el rendimiento, escribí dos programas simples que hacen lo mismo: uno está usando objetos, otro diccionario:
Objeto (tiempo de ejecución ~ 18 segundos):
class Obj(object):
def __init__(self, i):
self.i = i
self.l = []
all = {}
for i in range(1000000):
all[i] = Obj(i)
Diccionario (tiempo de ejecución ~ 12 segundos):
all = {}
for i in range(1000000):
o = {}
o['i'] = i
o['l'] = []
all[i] = o
Pregunta: ¿Estoy haciendo algo mal o el diccionario es más rápido que el objeto? Si el diccionario funciona mejor, ¿alguien puede explicar por qué?