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

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


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)

}


输出是:


[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我希望它具有相同的初始化值,但由于某种原因,它没有并且具有y与复制的最后一个元素相同的值。这是一个错误吗?


Cats萌萌
浏览 164回答 2
2回答

千巷猫影

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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go