今天我得到了这个密码:
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]]那么为什么结果会受到影响呢?我找不到任何理由,这让我很困惑,谢谢你的回答!
发布于 2020-09-13 00:04:49
嗯,result没有受到直接影响,但是combination (或者更确切地说,是它的底层数组)。
你“切片”combination以得到combination2。它们的底层数组是相同的。
现在,当您执行附加操作时,您基本上会说:“在这个切片结束之后,我想要元素0”。通过这样做,您还可以将第一个切片的最后一个元素更改为0。
查看下面的示例:https://play.golang.org/p/m0bPJDj9kHs
您可以通过使用copy()操作来防止这种情况。
https://stackoverflow.com/questions/63865861
复制相似问题