Почему zip(*(range(1000),)*1000000) такой быстрый?
В Python 3 как строка zip(*(range(1000),)*1000000)
выполняется менее чем за секунду?
Изменить: этот вопрос был отмечен как возможный дубликат вопроса Почему "1000000000000000 в диапазоне (1000000000000001)" так быстро в Python 3?. Хотя этот вопрос касаетсяrange
функция, этот вопрос касается zip
функция и почему это может происходить так быстро.
1 ответ
Поскольку, начиная с python3, zip
возвращает итератор, поэтому он фактически генерирует элементы по вашему запросу.
То же самое касается range
, map
а также filter
.
Раньше было range
а также xrange
, zip
а также izip
, где первый создает всю последовательность в памяти, а затем начинает повторять ее, а второй генерирует элементы на лету. Начиная с python3, они удалили другую версию, и по умолчанию используется итератор.
range()
теперь ведет себя какxrange()
используется, чтобы вести себя, за исключением того, что он работает со значениями произвольного размера. Последнего больше нет.
zip()
теперь возвращает итератор.