Какая разница между списками() и []

Какая разница между следующим кодом:

foo = list()

и

foo = []

Python предполагает, что есть один способ делать что-то, но иногда кажется, что их больше.

Ответ 1

Один вызов функции и один литерал:

>>> import dis
>>> def f1(): return list()
... 
>>> def f2(): return []
... 
>>> dis.dis(f1)
  1           0 LOAD_GLOBAL              0 (list)
              3 CALL_FUNCTION            0
              6 RETURN_VALUE        
>>> dis.dis(f2)
  1           0 BUILD_LIST               0
              3 RETURN_VALUE        

Используйте вторую форму. Это больше Pythonic, и это, вероятно, быстрее (поскольку это не связано с загрузкой и вызовом отдельной функции).

Ответ 2

list - это глобальное имя, которое может быть переопределено во время выполнения. list() вызывает это имя.

[] всегда является литералом списка.

Ответ 3

Для завершения еще нужно отметить, что list((a,b,c)) вернет [a,b,c], тогда как [(a,b,c)] не распакует кортеж. Это может быть полезно, если вы хотите преобразовать кортеж в список. Обратное работает тоже, tuple([a,b,c]) возвращает (a,b,c).

Изменить: Как упоминает orlp, это работает для любых итеративных, а не только кортежей.