O que é mais eficiente no Python em termos de uso de memória e consumo de CPU - Dicionário ou Objeto?
Antecedentes: tenho que carregar uma quantidade enorme de dados no Python. Eu criei um objeto que é apenas um contêiner de campo. Criar instâncias da 4M e colocá-las em um dicionário levou cerca de 10 minutos e ~ 6 GB de memória. Depois que o dicionário estiver pronto, acessá-lo é um piscar de olhos.
Exemplo: Para verificar o desempenho, escrevi dois programas simples que fazem o mesmo - um está usando objetos, outro dicionário:
Objeto (tempo de execução ~ 18s):
class Obj(object):
def __init__(self, i):
self.i = i
self.l = []
all = {}
for i in range(1000000):
all[i] = Obj(i)
Dicionário (tempo de execução ~ 12seg):
all = {}
for i in range(1000000):
o = {}
o['i'] = i
o['l'] = []
all[i] = o
Pergunta: Estou fazendo algo errado ou o dicionário é apenas mais rápido que o objeto? Se de fato o dicionário tem um desempenho melhor, alguém pode explicar o porquê?