go 是否append操作总会修改slice底层的array指针?

新手上路,请多包涵

如题,按我的理解来说append操作在不触发扩容逻辑时是不会修改底层的array指针的,但今天做了一下实验好像并不是这样,有大佬能解答一下嘛?
我的理解里,下面代码的输出结果应该是:3233234,但明显append操作并未影响copySlice。

func main() {
    testSlice := make([]int, 0, 8)
    testSlice = append(testSlice, 1, 2, 3)
    copySlice := testSlice
    testSlice[0] = 3
    for _, v := range copySlice {
        print(v)
    }
    testSlice = append(testSlice, 4)
    for _, v := range copySlice {
        print(v)
    }
}

43095a23b98132994f3f589b20d3f61.png

阅读 1.3k
1 个回答

copySlice 跟 testSlice 是两个不同的 slice 。

testSlice 里的数组指针变了,并不会影响 copySlice 里的数组指针。

testSlice 的 len 跟 cap 的改变,也不会影响 copySlice 的 len 跟 cap。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题