package main
import "fmt"
func main() {
src := []int{0, 1, 2, 3, 4, 5, 6}
a := src[:3]
b := src[3:]
a = append(a, 9)
fmt.Println(a, b)
}产出:
0 1 2 9
附件是否将底层数组修改为[]int{0,1,2,9,4,5,6}?切片a被复制为一个新的切片,其值为0、1、2、9,并且切片b仍然指向被修改的旧数组。
谢谢你的暗示,非常感谢
发布于 2022-02-11 02:33:48
a := src[:3]创建了一个片(指向src头的指针,length=3,capacity=7)b := src[3:]创建了一个片(指向src3、length=4、capacity=4)a和b的指针在附加到同一片时共享了srca = append(a, 9),创建的相同内存,只要它的不超过b,就会修改的数组)。
是
如果append超过cap of a,将分配新数组,并复制新数组中的数据。
试试这个:
package main
import "fmt"
func main() {
src := []int{0, 1, 2, 3, 4, 5, 6}
a := src[:3]
b := src[3:]
a = append(a, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9)
fmt.Println(a, b)
}输出:
0 1 2 9 9 9
https://stackoverflow.com/questions/71074298
复制相似问题