golang 切片copy复制 和 等号复制 区别
结论:copy复制会比等号复制慢。但是copy复制为值复制,改变原切片的值不会影响新切片。而等号复制为指针复制,改变原切片或新切片都会对另一个产生影响。
测试复制速度:
func TestArr1(t *testing.T) {var a []intfor 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 []intfor 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 []intfor i := 0; i < 100; i++ {a = append(a, i)}var b = make([]int, 10)copy(b, a)a[0] = 999fmt.Println(b[0])
}
结果0
func TestArr2(t *testing.T) {var a []intfor i := 0; i < 100; i++ {a = append(a, i)}var b = a[0:10]a[0] = 999fmt.Println(b[0])
}
结果 999
结论:copy为值复制,更改原切片不会影响新切片,而等号复制相反
golang 切片copy复制 和 等号复制 区别相关推荐
- 深度复制_Python 列表切片陷阱:引用、复制与深复制
Python 列表的切片和赋值操作很基础,之前也遇到过一些坑,以为自己很懂了.但今天刷 Codewars 时发现了一个更大的坑,故在此记录. Python 列表赋值:复制"值"还是 ...
- C++ Copy Constructor (拷贝构造函数,复制构造函数)
1.什么是Copy Constructor? Copy Constructor 是一个特殊的构造函数,一般只有一个参数,这个参数一般是用const修饰的,对自己类的一个引用(reference).什么 ...
- copy.deepcopy()函数深复制
copy.deepcopy()函数是一个深复制函数. 所谓深复制,就是从输入变量完全复刻一个相同的变量,无论怎么改变新变量,原有变量的值都不会受到影响. 与等号赋值不同,等号复制类似于贴标签,两者实质 ...
- SV学习笔记—浅复制和深复制的区别详解
目录 1.句柄的复制 2.对象的复制 2.1浅复制shallow copy 2.2深复制deep copy 3.this的用法 在类中,复制一半会涉及到句柄的复制,浅复制和深复制3种操作,下面来看看这 ...
- Golang 元素值在经过通道传递时会被复制,这个复制是浅复制
1. channel 元素值为切片 package mainimport ("fmt" )func main() {ch := make(chan []int, 3)s := [] ...
- 快照复制,事务复制,合并复制的区别
简单来说: 1.快照复制和事务复制是单向的(2005及以后的版本中加入了订阅端可更新的事务复制). 2.合并复制是双向的. -------------------------------------- ...
- IOS学习笔记十八(copy、mutableCopy、NSCopying、NSMutableCopy、深复制、浅复制)
1. copy.mutableCopy方法 copy方法返回对象的不可修改的副本 mutableCopy方法返回的对象可修改的副本 1).测试demo int main(int argc, char ...
- python中的copy模块(浅复制和深复制)
在总结copy模块中的浅复制(copy)和深复制(deepcopy)前,先对"引用"做下说明: 引用是指保存的值为对象的地址.在 Python 语言中,一个变量保存的值除了基本类型 ...
- IDEA插件系列(89):Copy/Paste Stack插件——复制/粘贴工具栈
1.插件介绍 Copy/Paste Stack插件. 复制/粘贴堆栈是一个高级复制历史管理器,包括剪贴板查看器.该插件添加了一个复制历史项目的工具窗口,类似于内置的标准复制历史,但可以保持持续打开并具 ...
最新文章
- JavaScript——this、constructor、prototype
- PKUWC2019游记WC2019游记
- 【科普】一文把数据科学、人工智能与机器学习讲清楚
- 超干货 | 在线教育增长实操者案例分享:如何玩转教育增长模型?
- ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
- java的et5_Javascript与java相同的3des加密(使用etdesede/CBC/PKCS5Padding )
- 晶振两端的谐振电容有特殊要求吗_干货 | 晶振电路设计诀窍
- Linux 开机启动
- [转]把复杂事物简明化
- 蓝桥杯 ADV-179 算法提高 解二元一次方程组
- 局域网共享设置——权限问题
- Java从入门到精通 第0章Java学习指南
- 全国各省五等份收入统计(2000-2017年)
- [解读] GuiltyGearXrd‘s Art Style : The X Factor Between 2D and 3D - GGX 3D 渲染 2D 风格
- C++ google code style.
- 心知天气html,esp8266初级入门实用教程一之访问心知天气读取实时天气数据
- AAAI2021论文: 时空Kriging的归纳式图神经网络
- 服务器怎么用固态盘安装系统,服务器使用固态盘安装
- 【知识产权之专利权】论述题题库
- VS中C++解决方案中多个项目文件的引用
热门文章
- 标题: Debian 下 VirtualBox 的桥接、USB 设置 ── 迷你怎么做 [转自sir]
- 视频可以转换html,10 个免费的 HTML 视频转换工具
- Tungsten Fabric SDN — Device Manager
- IPv6 — Multi-homing(多宿主/多链路/多归属)
- MySQL — 索引的慢查询优化与 B+ 树
- NanoPi NEO Air使用四:操作GPIO
- J-Flash的使用
- 第 15 章 Framework Design
- 用haproxy结合keepalived实现基于LNMP的负载均衡和高可用
- 高通转战服务器 能否撼动英特尔统治地位