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

记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 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)
}

输出

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值