[x for x in y] сразу создаёт список, а (x for x in y) создаёт генератор, выдающий элементы по запросу. Список хранит все результаты и допускает повторный обход; генератор обычно исчерпывается после одного прохода.
List comprehension и генератор: память и повторный обход
[x for x in y] сразу создаёт список, а (x for x in y) создаёт генератор, выдающий элементы по запросу. Список хранит все результаты и допускает повторный обход; генератор обычно исчерпывается после одного прохода.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
[x for x in y] сразу создаёт список, а (x for x in y) создаёт генератор, выдающий элементы по запросу. Список хранит все результаты и допускает повторный обход; генератор обычно исчерпывается после одного прохода.
Генератор полезен для больших потоков и короткого замыкания потребителя: неиспользованные элементы вычисляться не будут. Однако он удерживает ссылки на необходимые объекты и не делает источник автоматически компактным. У списка есть индексирование и длина; для генератора таких возможностей без потребления нет. Ошибка в теле выражения у генератора может проявиться позднее, во время итерации.