删除切片中的元素时分配给新变量会产生意外结果

Assignment to a new variable when deleting an element in a slice yields unexpected result

我在尝试删除切片中的元素时看到一些意外行为。下面是我的代码:

package main

import "fmt"

func main() {
    x := []int{1,2,3,4,5,6,7,8}
    y := append(x[:3],x[4:]...)
    fmt.Println(x)
    fmt.Println(y)
}

playground

输出是:

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

我希望输出为:

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

为什么结果不是我预期的?

换句话说,因为没有改变值的赋值 x 我希望它具有相同的初始化值但由于某种原因它没有并且具有与 [=14= 相同的值] 最后一个元素被复制。这是一个错误吗?

当有足够的 space 可用时,append 函数就地运行。切掉容量以避免这种行为:

y := append(x[:3:3],x[4:]...)

这就是发生的情况,当您追加时,x 发生了变化。

x = [1,2,3,  4,5,6,7, 8]
    [1,2,3] [5,6,7,8] # 4th, 5th, 6th, 7th elements are changed
     x[:3]    x[4:]

x = [1,2,3,5,6,7,8,8]