Golang 将 slice 附加到 slice 的 slice 上,那么 slice 会一直影响

今天我得到了这个代码:



import "fmt"


func main() {

    var results [][]int

    combination := []int{1, 2, 3, 4, 5}

    results = append(results, combination)

    fmt.Println(results)


    combination2 := combination[:len(combination)-1]

    combination2 = append(combination2, 0)

    fmt.Println(results)


}


输出显示:


[[1 2 3 4 5]]

[[1 2 3 4 0]]

那么为什么结果会受到影响呢?找不到任何原因,让我很困惑,谢谢你的回答!


人到中年有点甜
浏览 185回答 1
1回答

DIEA

好吧,result没有直接影响,而是combination(或者更确切地说,它的底层数组)。你“切片”combination得到combination2. 它们的底层数组是相同的。现在,当您执行附加操作时,您基本上会说“在这个切片结束后我想要元素0”。通过这样做,您还将第一个切片的最后一个元素更改为0。看看这个例子: https: //play.golang.org/p/m0bPJDj9kHscopy()PS您可以通过使用操作来防止这种情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go