スライスからスライスを作った場合、シャローコピーになる
- pikachu2 の技だけ変更したかったが、pikachu1 の技も変わってしまった
package main import "fmt" func main(){ pikachu1 := []string{"でんきショック", "なきごえ", "しっぽをふる", "でんじは"} pikachu2 := pikachu1 // [でんきショック なきごえ しっぽをふる でんじは] // pikachu2 に10まんボルトを覚えさせる pikachu2[2] = "10まんボルト" fmt.Println(pikachu1) // [でんきショック なきごえ 10まんボルト でんじは] <- pikachu1の技も変わってしまった fmt.Println(pikachu2) // [でんきショック なきごえ 10まんボルト でんじは] }
ディープコピーする方法
- 空スライスの中に、コピー元のスライスを展開する
package main import "fmt" func main(){ pikachu1 := []string{"でんきショック", "なきごえ", "しっぽをふる", "でんじは"} pikachu2 := append([]string{}, pikachu1...) // [でんきショック なきごえ しっぽをふる でんじは] // pikachu2 に10まんボルトを覚えさせる pikachu2[2] = "10まんボルト" fmt.Println(pikachu1) // [でんきショック なきごえ しっぽをふる でんじは] <- pikachu1 の技は変わっていない fmt.Println(pikachu2) // [でんきショック なきごえ 10まんボルト でんじは] }