arrays - GO - 数组复制是深拷贝还是浅拷贝?

标签 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]

问题:

array(a[0])复制的是深拷贝还是浅拷贝?

复制后,a[0] 是否具有与 a[1] 值(3 int)?

最佳答案

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

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

55 56 57 65 66 67

然后复制之后是这样的:

65 66 67 65 66 67

值有两个单独的副本。

(但 slice 不同。它们确实有指针,因此它们通常是浅拷贝。)

关于arrays - GO - 数组复制是深拷贝还是浅拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41887050/

相关文章:

javascript - 如何在 forEach 循环后填充数组

javascript - 无法读取数据数组。获取: Uncaught Error: Unknown type of column header: 1

go - 接口(interface)提供哪些保证?

c# - 不可变对象(immutable对象)中的浅拷贝与深拷贝

clone - 如何在 Perl 6 中创建对象的单独副本?

arrays - VBA 并行循环数组

javascript - 如何用Jquery或JS获取数组的objectname

c++ - Golang CGO异常0x40010006

sockets - 在不关闭连接的情况下关闭从 TCP 连接读取的 goroutine

c++ - 复制构造函数和赋值运算符实现选择 -