从切片中删除一个元素会复制 Go 中的最后一个元素?

Removing an element from a slice duplicates the last element in Go?

我在 go 中使用 slices 来更好地理解这种行为。 我写了下面的代码:

func main() {
    // Initialize
    myslice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    newSlice := myslice

    fmt.Println(myslice)
    fmt.Println(newSlice)

    removeIndex := 3
    newSlice = append(newSlice[:removeIndex], newSlice[removeIndex+1:]...)
    fmt.Println(myslice)
    fmt.Println(newSlice)


}

这是输出:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]

[1 2 3 5 6 7 8 9 9]
[1 2 3 5 6 7 8 9]

我真的不明白 newSlice 在末尾复制 9 会发生什么。另外,这是否意味着此操作从基础数组中删除给定元素?

https://go.dev/play/p/pf7jKw9YcfL

append 操作只是简单地移动底层数组的元素。 newSlicemySlice 是两个具有相同底层数组的切片。唯一不同的是两者的长度:append之后,newSlice有8个元素,而mySlice仍然有9个元素。