[[1 2 3] [1 3 2] [2 1 3] [2 3 1] [3 3 3] [3 3 3]],当复制位于循环内时,结果如下:
[[1 2 3] [1 3 2] [2 1 3] [2 3 1] [3 1 2] [3 2 1]],在第一个输出中,有两个带有 [3,3,3] 的数组,这是错误的,你说
我既不修改“c”或“r”也不附加到它们
,这部分是正确的。,在循环的第一次迭代中,切片
c
和 curr
指向不同的支持数组,所以这很好。,但是当你这么做的时候,稍后,您实际上将两个切片分配为指向同一个支持数组。,这意味着在第二次迭代中,您的 append
可以修改 curr
和 curr
(“可以”,因为调整大小会更改 curr
的支持数组)。,这就是导致您在上面看到的奇怪行为的原因。,go 中的切片有点棘手,所以当你知道你会改变并传递它们时,最好避免分配,而是坚持完全复制它们(就像在“works”情况下所做的那样)。,为了进一步阅读,这是一个很好的资源:https://go.dev/blog/slices-简介,