JuniorКодЧастоЕщё не отвечали
Предскажите вывод, когда мутируют скопированную struct-переменную
Прочитайте программу. Значение struct присваивается второй переменной, которую затем мутируют.
struct Point { var x = 0 }
var a = Point()
var b = a
b.x = 10
print(a.x)
Определите вывод print(a.x) и объясните почему.
Печатается 0. Присваивание var b = a копирует значение, поэтому b — независимая копия; мутация b.x меняет только эту копию, а a остаётся прежним. struct копируется при присваивании, а не разделяется.
- ✗Ожидают, что вторая переменная станет псевдонимом первой, а не копией
- ✗Думают, что присваивание
structразделяет хранилище, какclass - ✗Полагают, что копия настолько ленива, что поздние мутации протекут обратно
- →Как изменился бы вывод, будь
Pointклассом (class)? - →В какой момент значение действительно копируется при
var b = a?
Печатается 0. Присваивание var b = a копирует значение — b становится независимой копией. Мутация b.x = 10 меняет только копию, а a не затрагивается:
struct Point { var x = 0 }
var a = Point()
var b = a // копия значения
b.x = 10 // меняется только b
print(a.x) // 0
Значимые типы копируются при присваивании, поэтому у a и b независимое хранилище.