问题:go语言二维切片添加切片的问题
s:= [][]int{}
a := []int{1,2,3}
s = append(s,a) //s为 [[1,2,3]]
a[0] = 9 //s为[[9,2,3]]
需求: a变化的时候,s保持不变
解决方法一:
temp := make([]int,len(a))
copy(temp,a)
s = append(s,temp)
解决方法二:
s = append(s, append([]int(nil), a...))
原因是: 切片a的值中包含了对底层数组的指针,如果改变a中的值,底层数组不变的话,s也会跟着改变。 但是如果 append(a),有可能导致a扩容,扩容后a的底层数组引用就变了,改变a的值,s不会变化(包含的还是扩容前a的底层数组引用)