Какая временная сложность копирования массива в Swift?

«Какая временная сложность копирования массива в Swift?» — вопрос из категории Алгоритмы и структуры данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

O(n) в худшем случае, где n — количество элементов. Однако благодаря оптимизации Copy-on-Write (CoW) фактическое копирование происходит отложенно.

Как это работает:

  1. При присваивании (let b = a) создается новая ссылка на те же данные — O(1).
  2. Физическое копирование буфера памяти происходит только при попытке изменить один из массивов (мутация). Это и есть O(n), так как все элементы должны быть скопированы.

Пример:

var arrayA = [1, 2, 3] // Выделен буфер
var arrayB = arrayA    // O(1). Оба массива ссылаются на один буфер.

arrayB.append(4)       // O(n). Срабатывает CoW: для arrayB создается отдельная копия буфера, затем добавляется элемент.

Почему это важно: CoW оптимизирует производительность, избегая ненужных копий для массивов, которые только читаются.