54_Go基础_1_21 切片的拷贝
1 package main 2 3 import "fmt" 4 5 func main() { 6 /* 7 深拷贝:拷贝的是数据本身。 8 值类型的数据,默认都是深拷贝:array,int,float,string,bool,struct 9 10 11 浅拷贝:拷贝的是数据 地址。 12 导致多个变量指向同一块内存 13 引用类型的数据,默认都是浅拷贝:slice,map, 14 15 因为切片是引用类型的数据,直接拷贝的是地址。 16 17 func copy(dst, src []Type) int 18 可以实现切片的拷贝 19 20 */ 21 22 s1 := []int{1, 2, 3, 4} 23 s2 := make([]int, 0) //len:0,cap:0 24 for i := 0; i < len(s1); i++ { 25 s2 = append(s2, s1[i]) 26 } 27 fmt.Println(s1) // [1 2 3 4] 28 fmt.Println(s2) // [1 2 3 4] 29 30 s1[0] = 100 31 fmt.Println(s1) // [100 2 3 4] 32 fmt.Println(s2) // [1 2 3 4] 33 34 //copy() 35 s3 := []int{7, 8, 9} 36 fmt.Println(s2) // [1 2 3 4] 37 fmt.Println(s3) // [7 8 9] 38 39 // copy(s2, s3) // 将s3中的元素,拷贝到s2中 40 // fmt.Println(s2) // [7 8 9 4] 41 42 // copy(s3, s2) // 将s2中的元素,拷贝到s3中 43 // fmt.Println(s3) // [1 2 3] 44 45 copy(s3[1:], s2[2:]) 46 fmt.Println(s3) // [7 3 4] 47 48 }