Поскольку for range
l oop имеет одну переменную итерации, которая повторно используется в каждой итерации. Spe c: Для операторов: Для операторов с предложением for
Переменные, объявленные оператором init, повторно используются в каждой итерации.
Итак, в вашем первом l oop:
for _, t := range z {
temp := t[:]
id = append(id, temp)
}
есть один t
, и вы нарезаете один и тот же массив t
, поэтому каждый добавляемый вами temp
срез будет указывать на тот же самый резервный массив, который равен t
, и он перезаписывается на каждой итерации, поэтому его значением будет значение последней итерации: [c d]
.
Во второй секунде l oop:
for _, t := range z {
temp := t
id2 = append(id2, temp[:])
}
Также есть одна итерационная переменная t
, но вы делаете ее копию: temp := t
, и вы разрезаете эту копию, которая отделена от t
, и вы добавляете ломтик в качестве резервного массива используется копия, которая не будет перезаписываться на каждой итерации.