【问题标题】:GO - Is array copy a deep copy or shallow copy?GO - 数组拷贝是深拷贝还是浅拷贝?
【发布时间】:2017-01-27 04:39:17
【问题描述】:

对于下面的数组,

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's)?

【问题讨论】:

    标签: arrays go deep-copy shallow-copy


    【解决方案1】:

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

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

    55 56 57 65 66 67
    

    然后复制之后是这样的:

    65 66 67 65 66 67
    

    这些值有两个单独的副本。

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

    【讨论】:

    • @overexchange:从基本的documentation for Go开始。指针是语言的基础,没有它们你就无法真正使用它。
    • Go 有指针类型(如var p *int),但在这种情况下,我说的是作为切片头一部分的隐式指针。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多