GO - 数组复制是深拷贝还是浅拷贝?
GO - Is array copy a deep copy or 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]
是否与 a[1]
值(3 int
)有不同的值(3 int
)?
是深拷贝。 Go 中的数组不涉及任何指针(当然,除非它是一个指针数组)。数组类型的每个变量都有自己的连续内存块来保存其值。
在你的初始化代码之后,a
是这样的一块内存(6个连续内存字中只有6 int
秒):
55 56 57 65 66 67
然后复制之后是这样的:
65 66 67 65 66 67
值有两个单独的副本。
(但是slice不同,它们有指针,所以一般都是浅拷贝。)
对于下面的数组,
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]
是否与 a[1]
值(3 int
)有不同的值(3 int
)?
是深拷贝。 Go 中的数组不涉及任何指针(当然,除非它是一个指针数组)。数组类型的每个变量都有自己的连续内存块来保存其值。
在你的初始化代码之后,a
是这样的一块内存(6个连续内存字中只有6 int
秒):
55 56 57 65 66 67
然后复制之后是这样的:
65 66 67 65 66 67
值有两个单独的副本。
(但是slice不同,它们有指针,所以一般都是浅拷贝。)