zoukankan      html  css  js  c++  java
  • 值拷贝 与 引用拷贝,深拷贝 与 浅拷贝

    map,slice,chan 是引用拷贝;引用拷贝 是 浅拷贝

    其余的,都是 值拷贝;值拷贝 是 深拷贝

    深浅拷贝的本质区别:

    是否真正获取对象实体,而不是引用

     深拷贝:

    拷贝的是数据本身,创造一个新的对象,并在内存中开辟一个新的内存地址,与原对象是完全独立的,不共享内存,修改新对象时不会影响原对象的值。释放内存时,也没有任何关联。

     值拷贝:

    接收的是  整个array的值拷贝,所以方法对array中元素的重新赋值不起作用。

    package main  
      
    import "fmt"  
      
    func modify(a [3]int) {  
        a[0] = 4  
        fmt.Println("modify",a)             // modify [4 2 3]
    }  
      
    func main() {  
        a := [3]int{1, 2, 3}  
        modify(a)  
        fmt.Println("main",a)                  // main [1 2 3]
    }  

     浅拷贝:

    拷贝的是数据地址,只复制指向的对象的指针,新旧对象的内存地址是一样的,修改一个另一个也会变。释放内存时,同时释放。

     引用拷贝:

    函数的引用拷贝与原始的引用指向同一个数组,所以对数组中元素的修改,是有效的

    package main  
      
    import "fmt"  
      
    func modify(s []int) {  
        s[0] = 4  
        fmt.Println("modify",s)          // modify [4 2 3]
    }  
      
    func main() {  
        s := []int{1, 2, 3}  
        modify(s)  
        fmt.Println("main",s)              // main [4 2 3]
    }
  • 相关阅读:
    gdb 调试器的使用
    vi 的基本操作
    Makefile
    gcc
    动态内存分配
    Linux常用命令
    文件基本操作
    linux的启动配置文件(grub)
    Hello IT
    Val简介(来源维基百科)
  • 原文地址:https://www.cnblogs.com/yizhixiaowenzi/p/14664222.html
Copyright © 2011-2022 走看看