对于以下数组,
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
' s)而不是a[1]
值(3 int
&#39; s)?< / p>
答案 0 :(得分:4)
这是一本很深的副本。 Go中的数组并不涉及任何指针(当然,除非它是一个指针数组)。数组类型的每个变量都有自己的连续内存块来保存其值。
在初始化代码之后,a
是一个这样的内存块(在6个连续的内存字中只有6个int
):
55 56 57 65 66 67
然后在副本之后,就像这样:
65 66 67 65 66 67
值有两个单独的副本。
(但切片是不同的。它们确实有指针,所以它们通常会被浅层复制。)