go slice的拷贝问题
首先是深拷贝与浅拷贝的特点
- 浅拷贝实际是拷贝的地址,两个变量将会指向同一个空间,导致修改其中一方另一方也会跟着改变
- 深拷贝则拷贝所有的数据内容在一个新的空间内,这样两个就形成隔离,可以独立的操作而相互之间不发生影响
go中值类型都是深拷贝,而引用类型都是浅拷贝
常用的slice就有此问题
slice属于引用类型
对其用=进行复制就是浅拷贝
a:=make([]int,3)
b:=a
//此时的b就a 的浅拷贝,对b进行操作会导致a的改变
//如果a在扩容的时候,可能到导致数据的迁移,那样会导致a的地址变化,而b
//在原处,a,b之间分离
如果想要实现slice的深拷贝可以使用for循环进行复制
还可以是使用copy()
!!!但是 copy()有一个小问题
copy(a,b)会取其中容量小的为基础进行复制
如果想构造一个新的slice b,使其与a相同,此时直接创建
b:=[]type{}
copy(a,b)
是不行的,因为b此时为零值,这个copy过程什么效果也没有
所以b这个新的slice一定要指定大小
b:=make([]type,n)
另一个与拷贝相关的问题
二维切片的append问题
作者:beifangcc
出处:https://www.cnblogs.com/beifangcc/p/16650278.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
本文来自博客园,作者:北方Cc,转载请注明原文链接:https://www.cnblogs.com/beifangcc/p/16650278.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具