Since a slice header is passed by value, why can `func grow(s []int)` calling `append` sometimes mutate the caller's visible data and sometimes not?func grow(s []int) { s = append(s, 1) } // caller: a := make([]int, 2, 4) grow(a)