首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在片上附加修改了另一个片?

为什么在片上附加修改了另一个片?
EN

Stack Overflow用户
提问于 2022-02-11 01:24:20
回答 1查看 153关注 0票数 -2
代码语言:javascript
复制
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仍然指向被修改的旧数组。

谢谢你的暗示,非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-11 02:33:48

  • 片a被复制为具有值为0、1、2、9的新底层数组的新切片,而切片b仍然指向修改过的旧数组。

  • a := src[:3]创建了一个片(指向src头的指针,length=3,capacity=7)
  • b := src[3:]创建了一个片(指向src3、length=4、capacity=4)
  • ab的指针在附加到同一片时共享了src
  • a = append(a, 9),创建的相同内存,只要它的不超过b,就会修改

的数组)。

  • 确实将底层数组修改为[]int{0,1,2,9,4,5,6}

如果append超过cap of a,将分配新数组,并复制新数组中的数据。

试试这个:

代码语言:javascript
复制
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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71074298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档