切片的高效深度复制
在 Go 中,创建切片的深度复制涉及将其内容复制到单独的内存位置。这可确保对一个切片所做的任何修改不会影响另一个切片。
深度复制的一种方法是通过附加函数:
copy := append([]T{}, orig...)
这里,原始切片 orig 被附加到一个空切片,使用自己的支持数组创建一个新的切片副本。
另一种方法使用内置副本函数:
cpy := make([]T, len(orig)) copy(cpy, orig)
这种方法直接将元素从 orig 复制到新创建的切片 cpy。
两种解决方案都有效地复制了切片中的值。但是,请务必注意,如果切片包含指针或带有指针字段的结构,这些指针值仍将引用与原始切片中相同的位置。
对两种方法进行基准测试可产生相当的性能:
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
汇编代码显示追加和复制都可能执行内存零填充作为其
最终,追加和复制方法之间的选择取决于个人偏好和性能考虑。然而,这两种方法都可以有效地深度复制切片,从而在处理切片数据的单独实例时确保数据完整性。
以上是Go 切片:深度复制的附加与复制 – 哪个更有效?的详细内容。更多信息请关注PHP中文网其他相关文章!