go中切片的浅拷贝和深拷贝

39 阅读1分钟

浅拷贝

复制原来切片的地址,修改切片的时候,仍然是操作原来切片(注意,增删操作实际上是分配新的切片,不是操作原来的切片的地址)

a := []int{1, 2, 3}

b := a[:]   // 看似复制的操作,实际是浅拷贝

c := a[1:]  // 即使分割切片也是浅拷贝

return a    // 返回值同样是浅拷贝

如果我们需要在函数中返回值,但是不希望用户修改原来的空间,则需要使用深拷贝

浅拷贝

复制原来对象的内容

a := []int{1, 2, 3}

b := make([]int, len(a))  // 这里一定要提前分配空间,如果写成 var b []int是不会拷贝成功的

copy(b, a)