记go和python中的slice一个简单区别

来源:互联网 发布:编辑pdf用什么软件 编辑:程序博客网 时间:2024/06/03 10:20

记go和python中的slice区别

python中的slice是在原有基础上拷贝一份。go中的slice则是指向生成它的数组/切片,切最长长度不会超限。

python举例

#数组为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不是相同内存

go举例

package mainimport "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)}

输出

feiqianyousadeMacBook-Pro:go yousa$ go run slice.go[2 3][0 1 2 3 4 5 6 7 8 9][666 999][0 1 666 999 4 5 6 7 8 9]

可以看出来,修改数组,如果切片的值在其中,会被修改;反之,修改切片的值,其基于的数组的值也会被修改。

实际上可以理解为,切片和数组共用同一片内存。

0 0
原创粉丝点击