首先是深拷贝与浅拷贝的特点
- 浅拷贝实际是拷贝的地址,两个变量将会指向同一个空间,导致修改其中一方另一方也会跟着改变
- 深拷贝则拷贝所有的数据内容在一个新的空间内,这样两个就形成隔离,可以独立的操作而相互之间不发生影响
go中值类型都是深拷贝,而引用类型都是浅拷贝
常用的slice就有此问题
slice属于引用类型
对其用=进行复制就是浅拷贝
a:=make([]int,3)
b:=a
//此时的b就a 的浅拷贝,对b进行操作会导致a的改变
//如果a在扩容的时候,可能到导致数据的迁移,那样会导致a的地址变化,而b
//在原处,a,b之间分离
如果想要实现slice的深拷贝可以使用for循环进行复制
还可以是使用copy()
!!!但是 copy()有一个小问题
copy(a,b)会取其中容量小的为基础进行复制
如果想构造一个新的slice b其与a相同,此时copy(a,b)是不行的,因为b此时为零值,这个copy过程什么效果也没有