深浅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相关推荐

  1. python中的shallow copy 和 deep copy

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1.copy.copy 浅拷贝 只拷贝父对象 2.copy.deepcopy 深拷贝 拷贝父对象及其子 ...

  2. Python中列表的copy方法

    首先感谢,资料由网上的查询共享并保存下来的,该资料完全是用来学习,希望大家有用. 1.在列表中存在一个名为copy的方法,就像字面意思一样copy方法是用于复制列表元素的,示例如下: 1 names ...

  3. python中的深浅拷贝

    1.    浅拷贝  copy.copy 浅拷贝是对于⼀个对象的顶层拷贝 通俗的理解是:拷贝了引⽤,并没有拷贝内容 浅拷贝只复制第一层数据,更深层的引用不管. 2.    深拷贝   copy.dee ...

  4. Python中setdefault,deepcopy,copy函数(一分钟读懂)

    setdefault() setdefault() 函数 dict.setdefault(key, default=None) 使用方法 字典变量.serdefault('键名',"值&qu ...

  5. 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: ...

  6. python 的内存回收,及深浅Copy详解

    一.python中的变量及引用 1.1 python中的不可变类型: 数字(num).字符串(str).元组(tuple).布尔值(bool<True,False>) 接下来我们讲完后你就 ...

  7. python怎么设置颜色深浅变化_Python赋值、深浅copy

    Python赋值.深浅copy assignment: 在 Python 中,对象的赋值就是简单的对象引用,这点和 C++不同,如下所示 a = [1, 2, 'hello', ['python', ...

  8. python中一切数据都是对象吗_python中的深拷贝(deepcopy)和浅拷贝(copy)

    前言 在很多语言中都存在深浅拷贝两种拷贝数据的方式,Python中也不例外.本文中详细介绍了Python中的深浅拷贝的相关知识,文章的内容包含: 对象.数据类型.引用 赋值 浅拷贝 深拷贝 一.Pyt ...

  9. Python中copy()和deepcopy()的区别

    同样是copy,二者有什么不同呢今天我们就一探究竟!!! 关于copy()和deepcopy()的第一篇博客 初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从 ...

最新文章

  1. PAT甲级1082 Read Number in Chinese:[C++题解]字符串处理
  2. 去掉一键还原 开机按k键
  3. wince 6.0 嵌入式开发指导
  4. 【PowerBi】Power Query导入Excel数据
  5. c++ ado操作mysql_利用ADO在C++下操作access数据库
  6. apk反编译、smali修改、回编译笔记
  7. 影子卫士和影子系统哪个好用_win7和win10系统哪个好用
  8. 电脑文件备份到哪里最安全?
  9. jedis pool的问题
  10. 超实用!教你用 Python 获取并下载美股数据
  11. 更改sendmail附件大小限制
  12. adb学习:八:多个设备时候指定操作某个设备
  13. bpython ipython 区别_python-IPython Noteb
  14. Johnsen-lindenstrauss定理(J-L定理)
  15. flyway使用--基础
  16. 手把手教你开发第一个HarmonyOS (鸿蒙)移动应用
  17. No Debug UInit Device found 问题解决
  18. SyntaxHighlighter高亮显示
  19. opencv-基于颜色的目标检测(含代码)
  20. BIM技术初学者应该选择哪个软件?

热门文章

  1. Python学习笔记:第九站 一串连一串
  2. 分布式秒杀实战之订单数据分表
  3. 端口镜像(基于流的镜像)
  4. 提交的JDK输入法光标跟随,被要求予以详细说明
  5. python输出欢迎某某某_煎酿三宝中的三宝指(          )
  6. 全局描述符表GDT-第一部分
  7. Comet OJ - 2019六一欢乐赛C.收服宝可梦吧!
  8. 很好用的新闻微信小程序
  9. ifcfg-eth0文件参数PREFIX 和 NETMASK的配置不一致问题
  10. 拓嘉启远:拼多多有很多退款退货订单,怎么办