面试题答案
一键面试- 代码实现深拷贝:
package main
import (
"fmt"
)
func main() {
source := []int{1, 2, 3}
target := make([]int, len(source))
copy(target, source)
fmt.Println(target)
}
- 深拷贝原理解释:
- 使用
make
函数创建了一个新的切片target
,其长度和source
相同。 - 然后使用
copy
函数将source
中的元素逐个复制到target
中。这样target
和source
虽然元素值相同,但它们在内存中是不同的存储位置,实现了深拷贝。
- 使用
- 简单赋值问题:
- 如果使用简单赋值方式,例如
target := source
,这只是将source
的切片头(包含指向底层数组的指针、长度和容量信息)赋值给了target
。实际上target
和source
指向的是同一个底层数组。 - 当对
target
或source
中的任何一个切片进行元素修改时,另一个切片也会受到影响,因为它们共享底层数组,这不是深拷贝的效果。
- 如果使用简单赋值方式,例如