2017-01-27 6 views
0
以下の配列については

、配列のコピーを実行する上GO - 配列コピーはディープコピーかシャローコピーか?

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]は 'は(S a[1]値3 int)よりも(S別々の値3 int')を持っていますか?

答えて

4

ディープコピーです。 Goの配列にはポインタは含まれていません(ポインタの配列でない限り)。配列型の各変数には、その値を保持する独自の連続したメモリブロックがあります。

55 56 57 65 66 67 

次にコピーした後、それはこのようなものです::

65 66 67 65 66 67 
初期化コードの後

aは、このようなメモリのブロック(ちょうど6 int秒6での連続したメモリ・ワード)であります

2つの値のコピーがあります。

(しかし、スライスは彼らがポインタを持っています。さまざまであるので、それらは通常、浅くコピーされます。)

+0

私はCで良い思いますが、ポインタの概念がGOには存在しませんか? – overexchange

+1

@overexchange:基本的な[Go for documentation](https://golang.org/ref/spec)から始めてください。ポインタは言語にとって基本的なものであり、ポインタはそれがなければ実際には使用できません。 – JimB

+0

Goは 'var p * int'のようにポインタ型を持っていますが、この場合はスライスヘッダの一部である暗黙的なポインタについて話しています。 – andybalholm

関連する問題