美文网首页
GO学习 深拷贝和浅拷贝

GO学习 深拷贝和浅拷贝

作者: 3天时间 | 来源:发表于2022-05-19 22:18 被阅读0次

切片是引用类型

package main

import "fmt"

func main() {

  /*

  按照类型来分:

    基本类型:int,float,string,bool

    复合类型:array,slice,map,struct,pointer,finction,chan

  按照特点来分:

    值类型:int,float,string,bool,array

      传递的是数据副本

    引用类型:slice

      传递的地址,多个变量指向了同一块内存地址。

  所以:切片是引用类型的数据,存储了底层数组的引用

  */

  //1.数组:值类型

  a1 := [4]int{1,2,3,4}

  a2 := a1 //值传递:传递的是数据

  fmt.Println(a1,a2)

  a1[0] = 100

  fmt.Println(a1,a2)

  //2.切片:引用类型

  s1 :=[]int{1,2,3,4}

  s2 := s1

  fmt.Println(s1,s2)

  s1[0] = 100

  fmt.Println(s1,s2)

  fmt.Printf("%p\n",s1)

  fmt.Printf("%p\n",s2)

  fmt.Printf("%p\n",&s1)

  fmt.Printf("%p\n",&s1)

}

运行输出:

[1 2 3 4] [1 2 3 4]

[100 2 3 4] [1 2 3 4]

[1 2 3 4] [1 2 3 4]

[100 2 3 4] [100 2 3 4]

0xc000014460

0xc000014460

0xc0000044c0

0xc0000044c0

Process finished with exit code 0

图解:

图片过大无法上传

深拷贝和浅拷贝

package main

import "fmt"

func main() {

  /*

  深拷贝:拷贝的是数据本身。

    值类型的数据,默认都是深拷贝:array,int,float,string,bool,struct

  浅拷贝:拷贝的是数据地址。

    导致多个变量指向同一块内存

    引用类型的数据,默认都是浅拷贝:slice,map

    因为切片是引用类型的数据,直接拷贝的是地址。

  func copy(dst,src[]Type)int

    可以实现切片的拷贝

  */

  s1 := []int{1,2,3,4}

  s2 := make([]int,0) //len:0,cap:0

  for i:=0;i<len(s1);i++{

    s2 = append(s2,s1[i])

  }

  fmt.Println(s1)

  fmt.Println(s2)

  s1[0] = 100

  fmt.Println(s1)

  fmt.Println(s2)

  //copy()

  s3 := []int{7,8,9}

  fmt.Println(s2)

  fmt.Println(s3)

  //copy(s2,s3)//将s3中的元素,拷贝到s2中

  //copy(s3,s2)//将s2中的元素,拷贝到s3中

  copy(s3[1:],s2[2:])

  fmt.Println(s2)

  fmt.Println(s3)

}

运行输出:

[1 2 3 4]

[1 2 3 4]

[100 2 3 4]

[1 2 3 4]

[1 2 3 4]

[7 8 9]

[1 2 3 4]

[7 3 4]

Process finished with exit code 0

读完点个赞,给我的坚持更新注入新的活力。

2022.05.19日更 72/365 天

公众号:3天时间

往期同类文章:

GO学习 数组上创建切片

GO学习 slice

GO学习 多维数组

GO学习 Array类型和排序

GO学习 Array

相关文章

  • go和python的深浅拷贝理解

    go深拷贝, 就是拷贝值 go浅拷贝, 拷贝引用 go中赋值就能实现拷贝,针对引用类型(slice,map,cha...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • GO学习 深拷贝和浅拷贝

    切片是引用类型 package main import "fmt" func main() { /* 按照类型...

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • iOS--拷贝相关题

    1、什么是深拷贝什么是浅拷贝?浅拷贝和深拷贝的区别 * 浅拷贝(shallow copy):指针拷贝,对于被拷贝对...

  • copy和mutableCopy的区别

    copy和mutableCopy的区别 深拷贝和浅拷贝的区别 在OC中对象的拷贝方式有两种:深拷贝和浅拷贝.浅拷贝...

  • 2018-10-10函数基础

    深拷贝和浅拷贝 深拷贝 copy.deepcopy(对象)浅拷贝 copy.copy(对象)深拷贝: 将对象对应的...

  • Objective-C中的浅拷贝和深拷贝

    Objective-C中的浅拷贝和深拷贝 Objective-C中的浅拷贝和深拷贝

网友评论

      本文标题:GO学习 深拷贝和浅拷贝

      本文链接:https://www.haomeiwen.com/subject/jxdxprtx.html