Cosa è più efficiente in Python in termini di utilizzo della memoria e consumo di CPU: dizionario o oggetto?
Sfondo: devo caricare enormi quantità di dati in Python. Ho creato un oggetto che è solo un contenitore di campi. La creazione di istanze 4M e l'inserimento in un dizionario ha richiesto circa 10 minuti e ~ 6 GB di memoria. Dopo che il dizionario è pronto, accedervi è un battito di ciglia.
Esempio: per verificare le prestazioni ho scritto due semplici programmi che fanno lo stesso: uno sta usando oggetti, l'altro dizionario:
Oggetto (tempo di esecuzione ~ 18 sec):
class Obj(object):
def __init__(self, i):
self.i = i
self.l = []
all = {}
for i in range(1000000):
all[i] = Obj(i)
Dizionario (tempo di esecuzione ~ 12 sec):
all = {}
for i in range(1000000):
o = {}
o['i'] = i
o['l'] = []
all[i] = o
Domanda: sto facendo qualcosa di sbagliato o il dizionario è solo più veloce dell'oggetto? Se il dizionario funziona davvero meglio, qualcuno può spiegare perché?