上一篇文章说了Go语言的值传递,紧接着了解一下Go的浅,深拷贝
概念:
-
1.浅拷贝
拷贝的是数据的地址,复制指向的对象的指针,新对象和老对象指向的内存地址是一样的,新对象修改时老对象也会被修改,释放内存地址时,同时释放
引用类型的数据,默认都是浅拷贝,slice,map,chan -
2.深拷贝
拷贝的是数据本身,创造一个新的对象,新创建的对象和原对象不共享内存,新创建的对象在内存中开辟一个新的内存地址,新对象修改时不会影响原对象值,释放内存,可分别释放
值类型的数据,默认都是深拷贝,Array,Int,String,Struct,Float,bool
本质区别:
是否真正获取(复制)对象尸体,而不是引用.
举例浅拷贝:
package main
import "fmt"
type dog struct {
name string
age int
sex int
}
func main() {
dog1 := new(dog)
dog1.name = "dog1"
dog1.age = 11
dog1.sex = -<