Подтвердить что ты не робот

Инициализация пустых структур данных Python

Есть ли ощутимая разница между двумя формами синтаксиса, доступными для создания пустых списков/словарей Python, т.е.

l = list()
l = []

и

d = dict()
d = {}

Мне интересно, предпочтительнее ли использовать один из них.

4b9b3361

Ответ 1

Форма функции вызывает конструктор во время выполнения, чтобы вернуть новый экземпляр, тогда как буквальная форма заставляет компилятор "создать" его (действительно, чтобы выпустить байт-код, который приводит к новому объекту) во время компиляции. Первый может быть полезен, если (по какой-то причине) классы были локально отскочены к разным типам.

>>> def f():
...   []
...   list()
...   {}
...   dict()
... 
>>> dis.dis(f)
  2           0 BUILD_LIST               0
              3 POP_TOP             

  3           4 LOAD_GLOBAL              0 (list)
              7 CALL_FUNCTION            0
             10 POP_TOP             

  4          11 BUILD_MAP                0
             14 POP_TOP             

  5          15 LOAD_GLOBAL              1 (dict)
             18 CALL_FUNCTION            0
             21 POP_TOP             
             22 LOAD_CONST               0 (None)
             25 RETURN_VALUE        

Ответ 2

Основное отличие состоит в том, что одна форма включает поиск имени, а другой - нет. Пример, иллюстрирующий эту разницу:

def list():
    return {}

print []
print list()

печатает

[]
{}

Конечно, вы определенно не должны делать такую ​​ерунду.

Ответ 3

Моя кишка говорит мне, что оба приемлемы, если вы согласны.

Ответ 4

Я не знаю никакой разницы, было бы главным образом стилистическим предпочтением.