面试真题

Go · 中等 · CMSTOP

切片的深拷贝与浅拷贝

中等 Go 🎤 CMSTOP
参考答案
结论:切片赋值或截取是浅拷贝(共享底层数组);深拷贝需新建底层数组并复制元素,若元素为引用类型还需递归拷贝指向对象。区别:浅拷贝如s2:=s1或s2:=s1[:],仅复制SliceHeader,Data相同,修改元素互相影响。深拷贝用make新切片+copy,对于[]int等值类型元素,copy后两切片完全独立;对于[]*T,copy只拷贝指针,仍共享指针目标,需循环new对象并赋值才是完全深拷贝。示例:s1:=[]*int{&a}; s2:=make([]*int,1); s2[0]=new(int); *s2[0]=*s1[0]; 此时互不影响。
题目整理自公开面经,答案由校招宝自研生成,仅供参考