Значение a[0] останется 1. Добавление трёх элементов превышает capacity исходного среза, поэтому b получает независимый массив.
Какой результат покажет консоль в примере №50
Значение a[0] останется 1. Добавление трёх элементов превышает capacity исходного среза, поэтому b получает независимый массив.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что будет напечатано после выполнения следующего кода на Go:
a := []int{1,2}
b :=a[:]
b = append(b, 3, 4, 5)
b[0] = 2
a[0] - ?
Определите значение выражения a[0] после всех операций.
Ответ
Значение a[0] останется 1. Добавление трёх элементов превышает capacity исходного среза, поэтому b получает независимый массив.
Изначально a и b разделяют массив длины и вместимости 2. Вызов append расширяет b до длины 5 и обязан выделить новую область, скопировав туда 1 и 2.
После этого b[0] = 2 относится только к новому массиву. Последняя строка a[0] - ? — запись вопроса, не допустимый Go-код; для проверки нужен fmt.Println(a[0]). В отличие от append с достаточной вместимостью, здесь исходный массив не перезаписывается.