为了账号安全,请及时绑定邮箱和手机立即绑定

为什么切片追加元素不更新引用的元素?

为什么切片追加元素不更新引用的元素?

Go
智慧大石 2022-10-17 15:58:01
这条规则就是我对 Go 中 slice 的了解当元素的数量和容量的宽度相同时(len(fruits) == cap(fruits)),append() 产生的新元素就是新的引用。当元素个数小于容量(len(fruits) < cap(fruits))时,新元素被放入容量范围内,导致所有其他具有相同引用的切片元素值发生变化。我有这样的代码package mainimport (    "fmt")func main() {    //declare slice    var fruits = []string{"banana", "mango", "tomato"}    //using two index technique to make slice    var newFruits = fruits[1:2]    //append element to fruits slice    fruits = append(fruits, "papaya")        //append element to newFruits slice    newFruits = append(newFruits, "dragon")    fmt.Println(cap(fruits)) //2    fmt.Println(cap(newFruits)) //6    fmt.Println(newFruits) //[mango dragon]    fmt.Println(fruits) //[banana mango tomato papaya]    }为什么水果的价值不是【香蕉芒果龙木瓜】?
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

以下是代码的工作原理:

就在附加papaya到之前fruits

fruits = {"banana", "mango", "tomato"}

newFruits指向与 相同fruits但从 开始的数组mango

当您追加papaya到时fruits,将创建一个容量=6 的新数组,因为 的容量fruits为 3。fruits现在指向这个新数组,具有 4 个值:

fruits = {"banana", "mango", "tomato", "papaya"}

newFruits仍然指向旧fruits数组,并包含 2 个元素。


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 50 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信