#yyds干货盘点#愚公系列2022年08月 Go教学课程 027-深拷贝和浅拷贝
Posted 愚公搬代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#愚公系列2022年08月 Go教学课程 027-深拷贝和浅拷贝相关的知识,希望对你有一定的参考价值。
一、深拷贝和浅拷贝
1.浅拷贝
浅拷贝是指对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。go语言中赋值,函数传参, 函数返回值都是浅拷贝。
package main
import "fmt"
func main()
a := []string"1", "2", "3"
b := a
a[0] = "浅拷贝"
fmt.Println("a:", a)
fmt.Println("b:", b)
2.深拷贝
深拷贝是指拷贝对象的具体内容,二内存地址是自主分配的,拷贝结束之后俩个对象虽然存的值是一样的,但是内存地址不一样,俩个对象页互相不影响,互不干涉。
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)
总结
浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址,引用类型值改变新对象和原本对象都会受到影响。
深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,相当于完整复制一份数据和原本物关联。
深拷贝和浅拷贝区别:浅拷贝基本类型之前互不影响,引用类型其中一个对象改变了地址,就会影响另一个对象;深拷贝改变新对象不会影响原对象,他们之前互不影响。
以上是关于#yyds干货盘点#愚公系列2022年08月 Go教学课程 027-深拷贝和浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点#愚公系列2022年08月 Go教学课程 021-Go容器之切片操作
#yyds干货盘点#愚公系列2022年08月 Go教学课程 002-Go语言环境安装
#yyds干货盘点#愚公系列2022年08月 Go教学课程 031-结构体方法
#yyds干货盘点#愚公系列2022年08月 Go教学课程 035-接口和继承和转换与空接口