• golang 切片copy复制和等号复制的区别


    结论:copy复制会比等号复制慢。但是copy复制为值复制,改变原切片的值不会影响新切片。而等号复制为指针复制,改变原切片或新切片都会对另一个产生影响。

    测试复制速度:

    func TestArr1(t *testing.T) {
    var a []int
    for i := 0; i < 100000000; i++ {
    a = append(a, i)
    }
    start := time.Now().UnixNano()
    var b = make([]int, 1000000)
    copy(b, a)
    end := time.Now().UnixNano()
    fmt.Println(end - start)
    }

    结果为 5001100

    func TestArr2(t *testing.T) {
    var a []int
    for i := 0; i < 100000000; i++ {
    a = append(a, i)
    }
    start := time.Now().UnixNano()
    var b = a[0:1000000]
    end := time.Now().UnixNano()
    fmt.Println(end - start)
    _ = b
    }
    结果为0
    结论:等号复制要比copy赋值速度快

    测试更改原切片是否影响新切片:

    func TestArr1(t *testing.T) {
    var a []int
    for i := 0; i < 100; i++ {
    a = append(a, i)
    }
    var b = make([]int, 10)
    copy(b, a)
    a[0] = 999
    fmt.Println(b[0])
    }

    结果0

    func TestArr2(t *testing.T) {
    var a []int
    for i := 0; i < 100; i++ {
    a = append(a, i)
    }
    var b = a[0:10]
    a[0] = 999
    fmt.Println(b[0])
    }

    结果 999
    结论:copy为值复制,更改原切片不会影响新切片,而等号复制相反
    ————————————————
    版权声明:本文为CSDN博主「书生_AABB」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_36520153/article/details/85788763

  • 相关阅读:
    C# 二维数组 排列组合
    highcharts(数据可视化框架),ajax传递数据问题
    EasyPoi导入验证功能
    EasyPoi使用入门
    SSJ(Spring+springMVC+JPA)设置xml文件思路流程
    spring框架设置jdbc
    使用JDBC完成CRUD(增删改查)
    Java的数据类型(常量,变量)
    jdk8的安装与卸载
    Java的第一个你好世界
  • 原文地址:https://www.cnblogs.com/ExMan/p/14537618.html
Copyright © 2020-2023  润新知