当我使用golang';s append函数创建二维切片时,切片中的上一个值将更改

当我使用golang';s append函数创建二维切片时,切片中的上一个值将更改,go,Go,这是我的密码: 包src func子集(nums[]int)[]int{ var set=make([]int,0) var t=make([]整数,0) 集合=附加(集合,t) 对于i:=0;i

这是我的密码:

包src
func子集(nums[]int)[]int{
var set=make([]int,0)
var t=make([]整数,0)
集合=附加(集合,t)
对于i:=0;i
测试数据为[]int{1,2,3,4,5}
我调试它。发现:

当计算集合[22]时,集合[15]从[]int{1,2,3,4}变为[]int{1,2,3,5}


发生了什么。

问题是
的元素设置了类似于同一片的引用

最好为
集合
的每个元素创建一个新切片。追加不会创建新切片

下面是一个修复程序,它复制了
集合
的上一个向量,而不是简单地扩展它

package src

func Subsets(nums []int) [][]int {
    var sets = make([][]int, 0)
    var t = make([]int, 0)
    sets = append(sets, t)
    for i := 0; i < len(nums); i++ {
        for _, v := range sets {
            t = append([]int(nil), v...) // t is copy of v
            t = append(t, nums[i])
            sets = append(sets, t)
        }
    }
    return sets
}
包src
func子集(nums[]int)[]int{
var set=make([]int,0)
var t=make([]整数,0)
集合=附加(集合,t)
对于i:=0;i
此处测试: