Ответ
Поведение зависит от типа элементов массива. Массивы в Swift имеют семантику копирования при записи (copy-on-write).
- Изначально присваивание создает новую переменную, которая ссылается на те же самые данные в памяти.
- Изменение одной из копий (при условии, что она не единственная) может привести к фактическому копированию данных.
Пример с типами-значениями (например, Int):
var original = [1, 2, 3]
var copy = original // Пока нет реального копирования данных
copy[0] = 10 // В этот момент происходит копирование (copy-on-write)
print(original) // [1, 2, 3] - исходный массив не изменился
print(copy) // [10, 2, 3]
Пример с ссылочными типами (например, экземплярами классов):
class MyClass { var value = 1 }
var arrayA = [MyClass(), MyClass()]
var arrayB = arrayA // Обе переменные ссылаются на один массив объектов
arrayB[0].value = 100 // Меняется свойство у общего объекта
print(arrayA[0].value) // 100 - изменение видно в arrayA
Для создания полной, глубокой копии (особенно для ссылочных типов) необходимо копировать каждый элемент:
// Для классов, поддерживающих копирование
var deepCopy = original.map { $0.copy() }
// Или через инициализатор, если элемент — структура
var deepCopy = original.map { ElementType($0) }