浅拷贝和深拷贝
- 浅拷贝后的对象和源对象是同一个对象,值被修改,原值的数据也会被修改
- 深拷贝后的对象,是一个全新的对象,和源对象没有关系,修改值不会相互影响
浅拷贝示例
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]
}