Выбор ответа Middle Слайсы и мапы изнутри спрашивают часто обновлено
append в подслайс затирает исходный
Вопрос
Что выведет код?
a := []int{1, 2, 3, 4}
b := a[:2]
b = append(b, 9)
fmt.Println(a)
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: [1 2 9 4]. b := a[:2] смотрит в тот же массив, len 2, cap 4. append(b, 9) помещается в ёмкость и записывает 9 в элемент с индексом 2 общего массива, то есть поверх тройки в a.
Варианты ответа
[1 2 9 4]правильный ответ[1 2 3 4][1 2 3 4 9][1 2 9]
Разбор
b := a[:2] смотрит в тот же массив, len 2, cap 4. append(b, 9) помещается в ёмкость и записывает 9 в элемент с индексом 2 общего массива, то есть поверх тройки в a. Новый массив не выделяется, поэтому a меняется. Защита: a[:2:2] (ёмкость 2), тогда append скопирует данные.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Изменение элемента в range по слайсу структур
Следующий вопрос
Утечка памяти через подслайс
Ещё по теме «Слайсы и мапы изнутри»
- Разбить слайс на части по k на Go
- Удаление дубликатов с сохранением порядка на Go
- Группировка анаграмм на Go
- Циклический сдвиг слайса на Go
- Число подмассивов с суммой k на Go
- Топ-k частых слов на Go
- Что выведет Go: append при полной ёмкости
- Что выведет Go: два append в один подслайс