深拷贝和浅拷贝
1、浅拷贝
浅拷贝是指对地址的拷贝
浅拷贝的是数据地址,只复制指向的对象的指针,此时新对象和老对象指向的内存地址是一样的,新对象值修改时老对象也会变化,释放内存地址时,同时释放内存地址
引用类型的都是浅拷贝:slice
、map
、function
、interface {}
、chan
浅拷贝的特点:
- 拷贝的时候仅仅拷贝地址,地址指向的都是同一个值
- 在
a
中修改,则b
中也跟着变化 - 内存销毁是一致的
2、深拷贝
深拷贝是指将地址指向的值进行拷贝
深拷贝的是数据本身,创造一个一样的新对象,新创建的对象与原对象不共享内存,新创建的对象在内存中开辟一个新的内存地址,新对象值修改时不会影响原对象值。既然内存地址不同,释放内存地址时,可分别释放
值类似的都是深拷贝:int
、float
、bool
、array
、struct
深拷贝的特点:
- 复制的时候会新创建一个对象
- 指向完全不同的内存地址
- 修改是互不影响的
深拷贝
如果有对 切片和map 有需要进行 深拷贝 的场景可以使用这个2个封装的方法,在定时任务项目里面
本作品采用《CC 协议》,转载必须注明作者和本文链接