Что выведет код Middle Типы значений и ссылочные обновлено

Что выведет Swift: массив объектов после копирования

Вопрос

Что выведет код?

final class User {
    var name: String
    init(_ name: String) { self.name = name }
}

var a = [User("Аня"), User("Боря")]
var b = a
b[0].name = "Вика"
b.append(User("Гоша"))
print(a.count, a[0].name)

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 2 Вика. Массив копируется по значению: append в b не меняет a, поэтому в a два элемента.

Что выведет

2 Вика

Разбор

Массив копируется по значению: append в b не меняет a, поэтому в a два элемента. Но элементы это ссылки на одни и те же объекты User, и смена имени через b[0] видна через a[0].

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.