python中的slice是在原有基础上拷贝一份。go中的slice则是指向生成它的数组/切片,切最长长度不会超限。
#数组为1,2,3,4 >>> L=[1,2,3,4] #生成一个内容为2,3的切片 >>> slice1=L[1:3] >>> print(slice1) [2, 3] #修改其中一个值,查看切片和list的值是否有变化 >>> slice1[1]=5 >>> print(slice1) [2, 5] >>> print(L) [1, 2, 3, 4]
最后发现单独修改了slice切片,但是list值没有变化,说明生成的slice是生成的一份拷贝,跟原有的list不是相同内存
package main import "fmt" func main() { data := [...]int{0,1,2,3,4,5,6,7,8,9} slice := data[2:4] fmt.Println(slice) fmt.Println(data) data[2] = 666 slice[1] = 999 fmt.Println(slice) fmt.Println(data) }
输出
[2 3] [0 1 2 3 4 5 6 7 8 9] [666 999] [0 1 666 999 4 5 6 7 8 9]
可以看出来,修改数组,如果切片的值在其中,会被修改;反之,修改切片的值,其基于的数组的值也会被修改。
实际上可以理解为,切片和数组共用同一片内存。
原文:https://www.cnblogs.com/tracydzf/p/14931190.html