Что более эффективно в 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
Вопрос: Я что-то делаю неправильно, или словарь - это быстрее, чем объект? Если действительно словарь лучше работает, может кто-нибудь объяснить, почему?