浅拷贝是指对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。go语言中赋值,函数传参, 函数返回值都是浅拷贝。
package main
import "fmt"
func main() {
a := []string{"1", "2", "3"}
b := a
a[0] = "浅拷贝"
fmt.Println("a:", a)
fmt.Println("b:", b)
}
深拷贝是指拷贝对象的具体内容,二内存地址是自主分配的,拷贝结束之后俩个对象虽然存的值是一样的,但是内存地址不一样,俩个对象页互相不影响,互不干涉。
go语言中使用copy()函数来实现引用类型的深拷贝。
语法:
copy(dst[], src[]) //copy(目标切片, 源切片) 将源切片的值拷贝进目标切片。
package main
import "fmt"
func main() {
a := []string{"1", "2", "3"}
// 初始化一个空数组
b := make([]string, len(a), cap(a))
copy(b, a)
a[0] = "深拷贝"
fmt.Println("a:", a)
fmt.Println("b:", b)
}