Golang面試官:聊一聊淺複製和深複製
淺複製和深複製
- 淺複製後的物件和源物件是同一個物件,值被修改,原值的資料也會被修改
- 深複製後的物件,是一個全新的物件,和源物件沒有關係,修改值不會相互影響
淺複製示例
package main
import (
"fmt"
)
func main() {
a := []int{1, 2, 3, 4, 5}
// 淺複製
b := a
// 修改 b 的第一個元素
b[0] = 100
// 發現 a 的第一個元素也被修改了
fmt.Println(a) // [100 2 3 4 5]
fmt.Println(b) // [100 2 3 4 5]
}
深複製示例,使用內建函式copy
實現
package main
import (
"fmt"
)
func main() {
a := []int{1, 2, 3, 4, 5}
// 深複製
b := make([]int, len(a))
copy(b, a)
// 修改 b 的第一個元素
b[0] = 100
// 可以看到 a 的值並沒有被修改
fmt.Println(a) // [1 2 3 4 5]
fmt.Println(b) // [100 2 3 4 5]
}
公眾號回覆:
【golang加群】加入golang開發者交流群
【golang資料】獲取golang面試刷題資料
golang · 目錄
上一篇面試官:Golang語言中的panic和recover有什麼作用?下一篇Golang:bytes 格式和解析數字位元組值(10K、2M、3G等)