问题引入
go 语言中切片是引用类型。当我们把一个切片赋值给一个变量。对这个变量的修改也会改变原有的值。如下:
package main
import "fmt"
func main() {
// 也可以通过数组来构造切片
// make函数构造切片
a:=make([] int,2,10)
// 切片是引用的类型
b:=a
b[0]=1
b[1]=2
// a b 的值被同时修改
fmt.Println(a)
fmt.Println(b)
}
运行结果
由运行结果可以发现,当将a 赋值给b的后,对a的修改也会引起b的改变。这就是我们经常所说的浅拷贝
使用copy 进行深拷贝
有的时候我们需要进行深拷贝,深拷贝就是对新对象的修改不会引起旧对象的改变。这时候我们就可以使用copy()函数来进行深拷贝。
举例
func main() {
a:=make([] int,2,10)
b:=make([] int,2,10)
// 切片是引用的类型
copy(b,a)
b[0]=1
b[1]=2
// a b 的值被同时修改
fmt.Println(a)
fmt.Println(b)
}
运行结果如下