Slice 深拷贝
难度:⭐ 基础
考点
- slice 底层结构(共享底层数组)
- 深拷贝 vs 浅拷贝
- nil slice 与 empty slice 的区别
题目描述
实现一个 DeepCopy 函数,对 int 切片进行深拷贝。
要求:
- 返回一个全新的切片,修改返回值不影响原切片
- 如果输入为 nil,返回 nil
- 如果输入为空切片(len=0),返回空切片(非 nil)
函数签名
go
func DeepCopy(src []int) []int示例
go
src := []int{1, 2, 3}
dst := DeepCopy(src)
dst[0] = 100
// src[0] 仍然是 1提示
copy内置函数可以拷贝切片内容- 注意区分 nil slice 和 empty slice:
var s []int是 nil,[]int{}是 empty - 用
make创建新切片时,len 应该与 src 相同
参考答案(Go)
点击展开参考答案
go
//go:build ignore
package answer
// DeepCopy 参考答案
func DeepCopy(src []int) []int {
if src == nil {
return nil
}
dst := make([]int, len(src))
copy(dst, src)
return dst
}