Выбор ответа Junior Память и производительность спрашивают часто обновлено

Склейка строк в цикле

Вопрос

Как быстрее всего собрать строку из 100 000 кусков?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Список кусков и "".join(parts). Строки неизменяемы, и каждое s + part в общем случае создаёт новую строку, копируя накопленное: суммарно O(n²).

Варианты ответа

  1. s += part в цикле: строка дописывается на месте
  2. s = s + part в цикле
  3. s = f"{s}{part}" в цикле, f-строки быстрее
  4. Список кусков и "".join(parts)правильный ответ

Разбор

Строки неизменяемы, и каждое s + part в общем случае создаёт новую строку, копируя накопленное: суммарно O(n²). CPython иногда оптимизирует += на месте, но это деталь реализации, на которую не стоит полагаться. join заранее считает итоговую длину и копирует каждый кусок один раз. f-строка в цикле ничем не лучше конкатенации.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.