copy函数的作用
copy函数作用: 将一个切片复制到另一个切片
func main() {
a := []int{1,2,3}
b := []int{}
copy(b, a)
fmt.Println(a, b)
}
输出结果:
[1 2 3] []
因为copy时,copy的元素个数是 min(len(src), len(dst)), []int{}声明的切片长度为0,所以只能复制0个元素。
copy函数和等号赋值的区别:
func main() {
a := []int{1,2,3}
b := make([]int, 3)
copy(b, a)
b[0] = 11
fmt.Println(a, b)
}
输出结果:
[1 2 3] [11 2 3]
因为copy的情况下,两个slice引用的是不同的底层数组,改变一个不影响另一个。
func main() {
a := []int{1,2,3}
//b := make([]int, 3)
//copy(b, a)
b := a
b[0] = 11
fmt.Println(a, b)
}
输出结果:
[11 2 3] [11 2 3]
等号复制时,两个切片引用的同一个数组,改变一个会同时修改另一个。
往切片b append数据时,超出了make的容量,b会引用一个新的底层数组,改变b不影响a。
func main() {
a := []int{1,2,3}
b := a
b = append(b, 4)
b[0] = 11
fmt.Println(a, b)
}
输出结果:
[1 2 3] [11 2 3 4]