python中的深浅copy
深浅copy
复制,首先我们从切片技术说起。它应用于所有的序列,包括:列表,字符串,元祖。但是切片不能应用于字典,对于字典只能使用D.copy() 和 D.deepcopy()方法。
下面具体说一下深浅copy,可以应用于序列,也可以应用于字典
import copy a ={'a':1,'b':2}
x = copy.copy(a)
#浅拷贝:只拷贝顶级的对象,或者说父级对象
y = copy.deepcopy(a)
#深拷贝:拷贝所有的对象,顶级对象及其嵌套对象。
#或者说父级对象及其子对象
所以说:
深浅拷贝都是对源对象的复制,占用不同的内存空间
如果源对象只有一级目录的话,源对象做任何改动,不影响深浅拷贝对象
如果源对象不止一级目录的话,源对象做任何改动,都要影响浅拷贝,但不影响深拷贝
序列对象的切片其实是浅拷贝,即只拷贝顶级的对象
浅copy
data = { "name":"alex", "age":18, "scores":{ "语文":130, "数学":60, "英语":98, }
}d2 = datadata["age"] = 20
print(d2)
问题来了:d2打印的值里,age是18,还是20?
{'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
为何是20呢? 因为d2=data相当于只是拿到了data的内存地址,但data里的每个k,v都是有单独的内存的地址的。d2,data会一直共享这个dict里的数据,不会出现像之前字符串a=1,b=a, a=2, b依然等于1的情况。
如果我确实想复制一份完成的dict数据怎么办呢?
可以用浅copy语法
data = { "name":"alex", "age":18, "scores":{ "语文":130, "数学":60, "英语":98, }
}d2 = data.copy()data["age"] = 20
print(d2)
print(data)
输出
{'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
{'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
这样就相当于是2份独立数据了, 但是为什么这个语法叫做浅copy呢? 你改一下score里的值 就知道了。
data = { "name":"alex", "age":18, "scores":{ "语文":130, "数学":60, "英语":98, }}d2 = data.copy()
data["age"] = 20
data["scores"]["数学"] = 77 print(d2)
print(data)
看输出 , 很神奇,两个Dict里age的值是独立的,但score字典里的分数值貌似是共享的
{'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 77, '英语': 98}}
{'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 77, '英语': 98}}
因为浅copy会仅复制dict的第一层数据,更深层的scores下面的值依然是共享一份。
深copy
若你想彻底使上面的2个dict完全独立,无论有多少层数据。那就要用python工具包里的一个工具了.
python中的深浅copy相关推荐
- python中的shallow copy 和 deep copy
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1.copy.copy 浅拷贝 只拷贝父对象 2.copy.deepcopy 深拷贝 拷贝父对象及其子 ...
- Python中列表的copy方法
首先感谢,资料由网上的查询共享并保存下来的,该资料完全是用来学习,希望大家有用. 1.在列表中存在一个名为copy的方法,就像字面意思一样copy方法是用于复制列表元素的,示例如下: 1 names ...
- python中的深浅拷贝
1. 浅拷贝 copy.copy 浅拷贝是对于⼀个对象的顶层拷贝 通俗的理解是:拷贝了引⽤,并没有拷贝内容 浅拷贝只复制第一层数据,更深层的引用不管. 2. 深拷贝 copy.dee ...
- Python中setdefault,deepcopy,copy函数(一分钟读懂)
setdefault() setdefault() 函数 dict.setdefault(key, default=None) 使用方法 字典变量.serdefault('键名',"值&qu ...
- python中的深浅拷贝的区别
li = [1,1,2,3,4,5,6,7,8,9]l2=li # 这样定义不行共用内存空间,其实是一体# l2 = [1,1,2,3,4,5,6,7,8,9]l3=li[:]for i in l2: ...
- python 的内存回收,及深浅Copy详解
一.python中的变量及引用 1.1 python中的不可变类型: 数字(num).字符串(str).元组(tuple).布尔值(bool<True,False>) 接下来我们讲完后你就 ...
- python怎么设置颜色深浅变化_Python赋值、深浅copy
Python赋值.深浅copy assignment: 在 Python 中,对象的赋值就是简单的对象引用,这点和 C++不同,如下所示 a = [1, 2, 'hello', ['python', ...
- python中一切数据都是对象吗_python中的深拷贝(deepcopy)和浅拷贝(copy)
前言 在很多语言中都存在深浅拷贝两种拷贝数据的方式,Python中也不例外.本文中详细介绍了Python中的深浅拷贝的相关知识,文章的内容包含: 对象.数据类型.引用 赋值 浅拷贝 深拷贝 一.Pyt ...
- Python中copy()和deepcopy()的区别
同样是copy,二者有什么不同呢今天我们就一探究竟!!! 关于copy()和deepcopy()的第一篇博客 初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从 ...
最新文章
- PAT甲级1082 Read Number in Chinese:[C++题解]字符串处理
- 去掉一键还原 开机按k键
- wince 6.0 嵌入式开发指导
- 【PowerBi】Power Query导入Excel数据
- c++ ado操作mysql_利用ADO在C++下操作access数据库
- apk反编译、smali修改、回编译笔记
- 影子卫士和影子系统哪个好用_win7和win10系统哪个好用
- 电脑文件备份到哪里最安全?
- jedis pool的问题
- 超实用!教你用 Python 获取并下载美股数据
- 更改sendmail附件大小限制
- adb学习:八:多个设备时候指定操作某个设备
- bpython ipython 区别_python-IPython Noteb
- Johnsen-lindenstrauss定理(J-L定理)
- flyway使用--基础
- 手把手教你开发第一个HarmonyOS (鸿蒙)移动应用
- No Debug UInit Device found 问题解决
- SyntaxHighlighter高亮显示
- opencv-基于颜色的目标检测(含代码)
- BIM技术初学者应该选择哪个软件?