Swift использует как типы значений, так и типы ссылок для коллекций, однако стандартные коллекции (Array, Dictionary, Set) ведут себя как типы значений.
При копировании экземпляра Array, Dictionary или Set происходит копирование ссылок на элементы, но сама структура коллекции — это значение. Это означает, что изменения в одной копии не затрагивают другую, если только не изменяются сами элементы (если они являются типами ссылок).
Пример:
swift
Если элементы коллекции — типы ссылок, то при копировании коллекции копируются ссылки на те же самые объекты.
swift
Это поведение "copy-on-write" (копирование при записи) оптимизировано: фактическое копирование данных коллекции происходит только тогда, когда одна из ее копий модифицируется. Это повышает производительность, особенно при передаче коллекций в функции.