Что более эффективно в Python с точки зрения использования памяти и потребления ЦП - словарь или объект?
Предыстория: мне нужно загрузить огромное количество данных в Python. Я создал объект, который представляет собой просто контейнер поля. Создание 4M экземпляров и помещение их в словарь заняло около 10 минут и ~ 6 ГБ памяти. Когда словарь готов, доступ к нему происходит в мгновение ока.
Пример: Чтобы проверить производительность, я написал две простые программы, которые делают то же самое - одна использует объекты, другая словарь:
Объект (время выполнения ~ 18сек):
class Obj(object):
def __init__(self, i):
self.i = i
self.l = []
all = {}
for i in range(1000000):
all[i] = Obj(i)
Словарь (время выполнения ~ 12сек):
all = {}
for i in range(1000000):
o = {}
o['i'] = i
o['l'] = []
all[i] = o
Вопрос: Я что-то делаю не так или словарь просто быстрее, чем объект? Если действительно словарь работает лучше, может кто-нибудь объяснить, почему?