首页 >后端开发 >Golang >Go 切片:深度复制的附加与复制 – 哪个更有效?

Go 切片:深度复制的附加与复制 – 哪个更有效?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-10 21:00:15596浏览

Go Slices:  Append vs. Copy for Deep Copying – Which is More Efficient?

切片的高效深度复制

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn