Что обычно верно про (row for row in rows) по сравнению с [row for row in rows], если rows — большой поток данных?

AОба создают список в памяти одинакового размера.
BГенераторное выражение всегда быстрее списка.
CСписок нельзя итерировать, а генератор можно.
DГенераторное выражение вычисляет элементы лениво и обычно экономит память, но его результат одноразовый.
Правильный ответ. Генератор — ленивый и потоковый, список — материализованный и подходит для повторных проходов.

Разбор

List comprehension [row for row in rows] создаёт весь список сразу и хранит его в памяти. Generator expression (row for row in rows) возвращает итератор, который выдаёт элементы по мере запроса, поэтому чаще экономит память на больших данных. Но генератор нельзя «перемотать»: после одного прохода он исчерпывается.

Проверь себя · 1/3разбор после ответа
Какой объект является iterator и может быть напрямую использован в next(obj)?
Тренировать Python в Telegram

Ещё вопросы по теме «Итераторы и генераторы»