defaultdict будет использовать больше памяти, чем dict.get (), так как если ключ не найден, defaultdict установит значение по умолчанию в завернутом dict с ключом.
с другой стороны, dict.get () просто возвращает значение по умолчанию напрямую, если ключ не найден в dict. Не требуется дополнительного места.
Запуск 0,2 миллиарда с пустым dict с использованием python2,
200000000 199.584 0.000 283.804 0.000 default.py:11(get_default)
200000000 158.268 0.000 158.268 0.000 default.py:14(get_defaultdict)
Использование памяти при запуске 1 миллиона данных с пустым dict с использованием python2,
Line # Mem usage Increment Line Contents
================================================
17 10.918 MiB 10.918 MiB @profile
18 def run_get_default():
19 10.918 MiB 0.000 MiB h = {}
20 10.918 MiB 0.000 MiB for i in xrange(0, COUNT):
21 10.918 MiB 0.000 MiB get_default(h, i)
22 10.918 MiB 0.000 MiB get_default(h, i)
Line # Mem usage Increment Line Contents
================================================
24 10.918 MiB 10.918 MiB @profile
25 def run_get_defaultdict():
26 10.918 MiB 0.000 MiB h = defaultdict(int)
27 83.496 MiB 7.273 MiB for i in xrange(0, COUNT):
28 83.496 MiB 58.141 MiB get_defaultdict(h, i)
29 83.496 MiB 7.164 MiB get_defaultdict(h, i)
defaultdict нуждается в вызываемом значении в качестве значения по умолчанию для dict, вы также можете использовать функцию или лямбду, чтобы настроить собственное значение по умолчанию для каждого требования
dict.get ($ key, $ default) проще получить по умолчанию для каждой записи
Спасибо