博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python深拷贝与浅拷贝
阅读量:7281 次
发布时间:2019-06-30

本文共 990 字,大约阅读时间需要 3 分钟。

浅拷贝就是对引用的拷贝,深拷贝就是对对象资源的拷贝。

1.赋值
1.赋值是将一个对象的地址赋值给一个变量,让变量指向该地址;
2.修改不可变对象(字符串、数组等)需要给出新的空间;
3.修改可变对象(列表、字典等)不需要给出新空间。

2.浅拷贝

浅拷贝(切片、工厂函数、对象的copy()方法、copy模块中的copy函数)仅仅复制了存储空间中内容的地址

>>> a = ['huhu', [1, 2]]>>> b = a[:]>>> [id(x) for x in a][48401856, 48131728]>>> [id(x) for x in b][48401856, 48131728]>>> a[0] = 'haha'>>> a[1].append(3)>>> a['haha', [1, 2, 3]]>>> b['huhu', [1, 2, 3]]

从上面的代码可以看出,a和b没有修改前都是指向一个存储空间的,即他们的内容和地址都是相同的。当a修改时,因为字符串是不可变对象,所以需要给出新的存储空间来指定新的字符串,而列表就不用,所以b中字符串改变了,列表没变。(相当于一台电脑,a可以用,然后b也想用,a就把可以使用这台电脑的权限赋予b,这样ab公用这台电脑)

3.深拷贝

深拷贝完全拷贝了一个副本,存储空间内容和地址都不一样。
深拷贝只有一种方式:copy模块中的deepcopy函数。

>>> from copy import deepcopy>>> a = ['huhu', [1, 2]]>>> b = deepcopy(a)>>> [ id(x) for x in a][48401856, 48134104]>>> [ id(x) for x in b][48401856, 48333048]>>> a[0] = 'haha'>>> a[1].append(3)>>> a['haha', [1, 2, 3]]>>> b['huhu', [1, 2]]

从这里可以看出深拷贝是完全拷贝出来一个副本,重新给了一个存储空间赋值给b,内容和地址与a不同。(相当于一台电脑,a可以用,然后b也想用,a就给b买了一台一模一样的电脑使用,这样a用a的电脑,b用b的电脑)

转载于:https://blog.51cto.com/11838292/2048136

你可能感兴趣的文章
《Linux内核设计与实现》读书笔记(10)--- 定时器和时间管理(2)
查看>>
Spark On YARN内存分配
查看>>
Python学习笔记【第十三篇】:Python网络编程一Socket基础
查看>>
Hibernate ORM框架——项目一:Hibernate查询;项目二:集合相关查询
查看>>
Ionic2开发环境搭建
查看>>
ccf 最优灌溉
查看>>
(30)批处理文件.bat
查看>>
基于MFC和opencv的FFT
查看>>
0823模拟赛
查看>>
Ajax
查看>>
HDU 1849 Rabbit and Grass 【Nim博弈】
查看>>
JMeter-Java压力测试工具-01
查看>>
搜狐在线笔试 时间复杂度O(n)实现数组A[n]中所有元素循环左移k个位置
查看>>
写python时加入缩进设置
查看>>
ubuntu下安装opencv 2.4.9 脚本,支持摄像头和cuda
查看>>
Tensorflow 线性回归预测房价实例
查看>>
UBUNTU tftp 配置
查看>>
利用runtime给系统类添加动态属性
查看>>
通讯录管理系统(C语言)
查看>>
PHP类与继承
查看>>