Ответ
Нет, не всегда. Swift использует оптимизацию Copy-on-Write (CoW), чтобы избежать ненужных копий и повысить производительность.
Как это работает:
var originalArray = [1, 2, 3]
var copiedArray = originalArray // На этом этапе НЕТ реального копирования.
// Обе переменные ссылаются на один буфер в памяти.
copiedArray.append(4) // Только в этот момент, при первой модификации,
// происходит реальное копирование данных.
Ключевые моменты:
- Цель CoW: Отложить дорогостоящее копирование до момента, когда это действительно необходимо.
- Где применяется: Swift автоматически реализует CoW для стандартных коллекций (
Array,Dictionary,Set,String). - Для пользовательских типов: Чтобы добавить CoW в свою структуру, нужно вручную управлять ссылкой на хранилище, используя
isKnownUniquelyReferenced.
Вывод: Value-семантика гарантирует логическую независимость копий, но физическое копирование данных происходит только при модификации, благодаря CoW.