Литеральный синтаксис быстрее чем вызов конструкторов словарей и множеств

854 0

Python язык медленный и для любого минимального ускорения приходится хитрить, а так же учитывать особенности языка.
Одной из таких особенностей является разница в скорости способов создания словарей и множеств.

Варианты создания словаря:

dis('{"n":2}')
  1           0 LOAD_CONST               0 ('n')
              2 LOAD_CONST               1 (2)
              4 BUILD_MAP                1
              6 RETURN_VALUE
dis('dict(n=2)')
  1           0 LOAD_NAME                0 (dict)
              2 LOAD_CONST               0 (2)
              4 LOAD_CONST               1 (('n',))
              6 CALL_FUNCTION_KW         1
              8 RETURN_VALUE
Варианты создания множества:
dis('{1, 2}')
  1           0 LOAD_CONST               0 (1)
              2 LOAD_CONST               1 (2)
              4 BUILD_SET                2
              6 RETURN_VALUE
dis('set([1, 2])')
  1           0 LOAD_NAME                0 (set)
              2 LOAD_CONST               0 (1)
              4 LOAD_CONST               1 (2)
              6 BUILD_LIST               2
              8 CALL_FUNCTION            1
             10 RETURN_VALUE

Хорошо видно, что в случае создания словаря или множества через конструктор
дизасемблер показывает минимум на один вызов больше.
Потому как python, прежде чем создавать словарь или множествао, должен найти их классы по имени.
При частом создании словарей и множеств это может, хоть немного, но ускорить наши скрипты. ;)

Комментарии

Контактные данные

 Россия, г. Москва