今天我得到了这段代码:
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]]
那么为什么结果受到影响?我找不到任何原因,这让我很困惑,谢谢您的回答!
最佳答案
好吧,result
不会受到直接影响,但是combination
会受到影响(或者更确切地说,是其基础数组)。
您“ slice ” combination
以获得combination2
。它们的底层数组是相同的。
现在,当您执行追加操作时,您基本上会说“在此 slice 结束后,我需要元素0
”。这样,您还可以将第一个 slice 的最后一个元素更改为0
。
看看这个例子:https://play.golang.org/p/m0bPJDj9kHs
附言您可以通过使用copy()
操作来防止这种情况。
关于go - Golang将slice append 到slice的slice上,那么slice会一直影响slice的slice吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63865861/