切片的高效深度複製
在 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中文網其他相關文章!