big_static_data создается один раз в начале файла (по крайней мере, в коде, который вы показываете).
Это потребляет память.
Когда вы создаете экземпляр StaticDataEarlyLoad,
StaticDataEarlyLoad (). Static_data является ссылкой на big_static_data.
Он потребляет очень небольшое количество памяти. Он просто указывает на тот же словарь, на который указывает big_static_data. Копия big_static_data не создается, не происходит никакой "загрузки".
Когда экземпляр StaticDataEarlyLoad () получает сборщик мусора, освобождается немного памяти, но данные big_static_data остаются.
StaticDataLazyLoad делает то же самое, но не создает атрибут static_data
. Он просто ссылается на big_static_data напрямую. Разница в потреблении памяти между StaticDataEarlyLoad и StaticDataLazyLoad очень незначительна. И по существу разницы в скорости не будет.
всегда лучше четко указать, от чего зависит класс.
StaticDataEarlyLoad
зависит от big_static_data.
Следовательно, вы должны определить
class StaticDataEarlyLoad:
def __init__(self,static_data):
self.static_data = static_data
И инициализировать экземпляры с StaticDataEarlyLoad(big_static_data)
.
По сути, нет разницы в скорости между этим определением и тем, которое вы опубликовали. Поместить зависимости в сигнатуру вызова __init__
- это просто хорошая идея для организации, и в конце концов вы используете ООП Python для хорошего контроля организации, верно?