GO - 阵列复制是深拷贝还是浅拷贝?

时间:2017-01-27 04:39:17

标签: arrays go deep-copy shallow-copy

对于以下数组,

var a[2][3]int
a[0][0] = 55
a[0][1] = 56
a[0][2] = 57
a[1][0] = 65
a[1][1] = 66
a[1][2] = 67

执行阵列复制时,

a[0] = a[1]

问题:

数组(a[0])是复制深拷贝还是浅拷贝?

复制后,a[0]是否具有单独的值(3 int&#39; s)而不是a[1]值(3 int&#39; s)?< / p>

1 个答案:

答案 0 :(得分:4)

这是一本很深的副本。 Go中的数组并不涉及任何指针(当然,除非它是一个指针数组)。数组类型的每个变量都有自己的连续内存块来保存其值。

在初始化代码之后,a是一个这样的内存块(在6个连续的内存字中只有6个int):

55 56 57 65 66 67

然后在副本之后,就像这样:

65 66 67 65 66 67

值有两个单独的副本。

(但切片是不同的。它们确实有指针,所以它们通常会被浅层复制。)