Создается ли глубокая копия reference type (класса) при присвоении его другой переменной в Swift?

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

Ответ

Нет, при присвоении копируется только ссылка (указатель) на объект, а не сам объект. Обе переменные начинают ссылаться на один и тот же экземпляр в памяти.

Пример с reference type (класс):

class Person {
    var name: String
    init(name: String) { self.name = name }
}

let alice = Person(name: "Alice") // Создан объект, `alice` ссылается на него.
let bob = alice // Копируется ССЫЛКА. `bob` теперь указывает на тот же объект.
bob.name = "Bob"

print(alice.name) // "Bob" - изменение через `bob` затронуло объект, на который ссылается `alice`.

Сравнение с value type (структура):

struct Point {
    var x, y: Int
}

var p1 = Point(x: 1, y: 2) // Создана структура.
var p2 = p1 // Создается ПОЛНАЯ КОПИЯ значений.
p2.x = 3

print(p1.x) // 1 - оригинальная структура `p1` не изменилась.

Итог: Для reference types присваивание семантически означает «разделение объекта», для value types — «создание независимой копии».