深浅拷贝

1.深浅拷贝

01.深浅拷贝

1.1 深浅拷贝定义

  • 浅拷贝就是只拷贝指针的值,指针指向的内容只有一份。
  • 而深拷贝是把指针指向的值拷贝一份。
  • golang里面也有浅拷贝和深拷贝。
  • slice的浅拷贝就是指slice变量的赋值操作。
  • slice的深拷贝就是指使用内置的copy函数来拷贝两个slice。

1.2 深浅拷贝代码举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main
import "fmt"

func main() {
SliceShallowCopy()
SliceDeepCopy()
}

func SliceShallowCopy() {
src := []byte {1,2,3,4,5,6}
dst := src
fmt.Println("浅拷贝原始数据",src) // [1 2 3 4 5 6]
dst[0]=10
// 修改拷贝数据,原始数据会以前跟着改变
fmt.Println("after modify[src]:",src) // [10 2 3 4 5 6]
}

func SliceDeepCopy() {
src := []byte {1,2,3,4,5,6}
var dst = make([]byte, len(src))
copy(dst[:], src)
fmt.Println("深拷贝前:",src) // [1 2 3 4 5 6]
dst[0]=10
fmt.Println("深拷贝修改拷贝数据值后:",src) // [1 2 3 4 5 6]
}

深浅拷贝
http://coderedeng.github.io/2021/02/12/Go进阶 - 深浅拷贝/
作者
Evan Deng
发布于
2021年2月12日
许可协议