Go 是否删除切片导联中的元素?是否更改原始切片的导联?

Go 是否删除切片导联中的元素?是否更改原始切片的导联?,go,Go,我只是展示了代码,非常简单 但我得到了: [2 3 4 5 6] [2 4 5 6 6] [2 4 6 6 6] [2 4 6 6 6] [2 4 6 6 6] [2 4 6 6 6] 为什么??go说,如果slice的容量不够,它将为元素生成realloc,我甚至更改了origin slice中的任何内容 谁能解释一下这是怎么发生的吗?我想我知道为什么 切片a[:i]将返回一个容量大小为6的切片(作为原始切片),因此追加不会重新定位新切片,而是使用原始切片 b := append(a[:i

我只是展示了代码,非常简单

但我得到了:

[2 3 4 5 6]
[2 4 5 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
为什么??go说,如果slice的容量不够,它将为元素生成realloc,我甚至更改了origin slice中的任何内容

谁能解释一下这是怎么发生的吗?

我想我知道为什么

切片a[:i]将返回一个容量大小为6的切片(作为原始切片),因此追加不会重新定位新切片,而是使用原始切片

 b := append(a[:i], a[i+1:]...)
此代码将更改一个切片。 我的代码:

func main(){
a:=[]int{1,2,3,4,5,6}
对于i:=0;i
您可以使用copy:b:=append(a[:i],a[i+1:]…)完成所需操作,当然,此代码将更改a
[2 3 4 5 6]
[2 4 5 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
[2 4 6 6 6]
 b := append(a[:i], a[i+1:]...)
func main() {
    a := []int{1, 2, 3, 4, 5, 6}
    for i := 0; i < len(a); i++ {
        a1 := make([]int,6)
        copy(a1, a)
        b := make([]int,5)
        b = a1[:i]
        b = append(b, a1[i+1:]...)
        fmt.Println(b)
    }
    fmt.Println(a)
}