Вопрос проверяет понимание оптимизаций стандартной библиотеки Swift и того, как value-типы могут быть эффективными.
Copy-on-write означает, что массивы и словари копируются только при изменении. Пока данные используются только для чтения, несколько переменных могут ссылаться на одно и то же хранилище. Как только одна из них модифицируется, Swift создаёт копию. Это позволяет сочетать value-семантику с высокой производительностью.
Copy-on-write — ключевая оптимизация, благодаря которой коллекции Swift работают быстро и безопасно.
Copy-on-write (CoW) — стратегия, при которой фактическое копирование данных откладывается до момента их изменения.
Когда ты делаешь:
let a = [1, 2, 3]
var b = a
На этом этапе:
данные не копируются
a и b указывают на одно хранилище
Копия создаётся только при попытке изменить данные:
b.append(4)
Теперь:
b получает собственную копию
a остаётся неизменным
Стандартная библиотека:
проверяет, уникально ли хранилище
если нет — делает копию перед записью
Это происходит автоматически и прозрачно.
Copy-on-write:
уменьшает количество аллокаций
снижает потребление памяти
делает передачу коллекций дешёвой
При этом:
value-семантика сохраняется
неожиданных сайд-эффектов нет
Array
Dictionary
Set
String
Copy-on-write позволяет Swift коллекциям выглядеть как value-типы, но работать с производительностью, близкой к reference-типаам.