Эффективно выделить много объектов Python

Я работаю над программой на Python, и есть внутренний цикл, который вызывает проблемы с производительностью. Я запустил на нем профилировщик и обнаружил, что 50% времени тратится на распределение объектов. В основном, как-то так:

result_list = []
for i in range(BIG_NUMBER):
    obj = MyClass()
    # do stuff with obj...
    result_list.append(obj)

Линия obj = MyClass() занимает 50% времени. Есть ли способ эффективно разместить множество этих объектов в Python? Возможно, какое-то массовое распределение?

Редактировать: без копирования / вставки всего MyClassимеет следующие характеристики:

  • Это объект ORM, поэтому он в основном отображает атрибуты в значения базы данных.
  • У него довольно много функций свойств, мета-класса и т. Д., Так что это довольно "толстый" класс

# do stuff with obj... Линия в значительной степени устанавливает различные атрибуты, обычно через setattr, но в некоторых случаях с помощью пользовательской функции. Так что, если нужно установить 10 атрибутов, 9 обычно будет через setattrи 1 может быть через специальную функцию. Эта часть занимает ~40% времени, и я оптимизирую ее отдельно.

1 ответ

Если объект начинается с пустого вызова конструктора, не могли бы вы вытащить его, если цикл? Затем copy.deepcopy ваш начальный объект?

Другие вопросы по тегам