当前位置:
首页 > Python基础教程 >
-
python中copy和deepcopy的使用区别
python中标识一个对象唯一身份的是:对象的id(内存地址),对象类型,对象值。
deepcopy是真正意义上的复制,深拷贝,被复制对象完全复制一遍作为独立的新个体,新开辟一块空间。
浅拷贝,不会产生独立对象,等于赋值,只是对原有数据块打上新标签,其中一个标签改变,数据块就会变化。浅拷贝等于赋值,也可以通过copy实现,copy仅拷贝对象本身,浅拷贝不会对其中的子对象进行拷贝,如果对子对象进行修改,拷贝结果也会随着修改。
复制的对象中无复杂子对象,即列表中不嵌套列表,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。
复制的对象中有复杂子对象 (例如列表中的一个子元素是一个列表)如果改变复杂子对象的值(列表中的值)会影响浅复制的值。
import copy
a = [1,2,3,[4,5],1]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(9)
a[3].append(6)
print(a) #[1, 2, 3, [4, 5, 6], 1, 9]
print(b) #[1, 2, 3, [4, 5, 6], 1, 9]
print(c) #[1, 2, 3, [4, 5, 6], 1]
print(d) #[1, 2, 3, [4, 5], 1]
print(id(a)) #4594148288
print(id(b)) #4594148288
print(id(c)) #4594455328
print(id(d)) #4592688496
x = 'Hello World'
y = x
z = copy.copy(x)
w = copy.deepcopy(x)
print(id(x)) #4617118576
print(id(y)) #4617118576
print(id(z)) #4617118576
print(id(w)) #4617118576
# 对于不可变类型(元组、数值,字符串等)为浅拷贝,对象的id值与浅复制原来的值相同
# 对于可变类型(列表、字典等)为深拷贝,
复制
import copy
a = [1,2,3,[4,5],1]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(9)
a[3].append(6)
print(a) #[1, 2, 3, [4, 5, 6], 1, 9]
print(b) #[1, 2, 3, [4, 5, 6], 1, 9]
print(c) #[1, 2, 3, [4, 5, 6], 1]
print(d) #[1, 2, 3, [4, 5], 1]
print(id(a)) #4594148288
print(id(b)) #4594148288
print(id(c)) #4594455328
print(id(d)) #4592688496
x = 'Hello World'
y = x
z = copy.copy(x)
w = copy.deepcopy(x)
print(id(x)) #4617118576
print(id(y)) #4617118576
print(id(z)) #4617118576
print(id(w)) #4617118576
# 对于不可变类型(元组、数值,字符串等)为浅拷贝,对象的id值与浅复制原来的值相同
# 对于可变类型(列表、字典等)为深拷贝,
到此这篇关于python中copy和deepcopy的使用区别的文章就介绍到这了,更多相关python copy deepcopy内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
原文链接:https://blog.csdn.net/weixin_43804047/article/details/125028916
栏目列表
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比