首页 > 解决方案 > Golang 将 slice 附加到 slice 的 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]]

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

标签: goappendslice

解决方案


好吧,result没有直接影响,而是combination(或者更确切地说,它的底层数组)。

你“切片”combination得到combination2. 它们的底层数组是相同的。

现在,当您执行附加操作时,您基本上会说“在这个切片结束后我想要元素0”。通过这样做,您还将第一个切片的最后一个元素更改为0

看看这个例子: https: //play.golang.org/p/m0bPJDj9kHs

copy()PS您可以通过使用操作来防止这种情况。


推荐阅读