删除切片中的元素时分配给新变量会产生意外结果
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)
}
输出是:
[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]
我在尝试删除切片中的元素时看到一些意外行为。下面是我的代码:
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
我希望它具有相同的初始化值但由于某种原因它没有并且具有与 [=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]