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

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

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

Go
Cats萌萌 2021-09-21 20:48:25
尝试删除切片中的元素时,我看到了一些意外行为。下面是我的代码:package mainimport "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与复制的最后一个元素相同的值。这是一个错误吗?
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

append当有足够的空间可用时,该函数就地运行。切掉避免这种行为的能力:

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


查看完整回答
反对 回复 2021-09-21
?
隔江千里

TA贡献1906条经验 获得超10个赞

这就是发生的情况,当您追加时,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]


查看完整回答
反对 回复 2021-09-21
  • 2 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

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