首頁 >後端開發 >Golang >如何在 Go 中有效率地深度複製切片?

如何在 Go 中有效率地深度複製切片?

Barbara Streisand
Barbara Streisand原創
2024-12-09 18:15:151035瀏覽

How to Efficiently Deep Copy a Slice in Go?

在 Go 中深度複製切片

在 Go 中,有效地創建切片的深度副本對於防止修改原始後備數組至關重要。一種常用的方法涉及使用切片文字和追加函數:

copy := append([]T{}, orig...)

但是,還有一種利用內建複製函數的替代方法:

cpy := make([]T, len(orig))
copy(cpy, orig)

這種方法檢索所需的儲存並使用複製內建函數直接將元素從來源複製到目標。根據文件:

func copy(dst, src []Type) int
The copy built-in function copies elements from a source slice into a
destination slice. ... Copy returns the number of elements copied, which will be the minimum
of len(src) and len(dst).

注意:

兩種方法都執行淺複製,這意味著切片內的指針或結構體字段仍將指向到原來的

基準:

比較兩種技術的性能會產生相似的結果:

BenchmarkCopy     100000         24724 ns/op
BenchmarkAppend   100000         24967 ns/op

這表明這兩種方法同樣適合Go中的深度複製切片。然而,在處理大切片時,複製函數方法可能會稍微更有效。

以上是如何在 Go 中有效率地深度複製切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn