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

Why slice append element not update referenced element?

这个规则就是我所知道的Go中的slice

我有这样的代码

package main

import (
    "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]
    
}

为什么水果的价值不是[香蕉芒果龙木瓜]?

代码的工作原理如下:

就在将 papaya 附加到 fruits 之前,

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

newFruits 指向与 fruits 相同的数组,但从 mango.

开始

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

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

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