# 浅谈深浅拷贝

>>> dic = {"one":["one1","one2"],"two":{"two1":"hello","two2":"world"}}
>>>
>>> dic
{'one': ['one1', 'one2'], 'two': {'two1': 'hello', 'two2': 'world'}}

# 浅拷贝
>>> dic2 = dic.copy() # 对dic进行浅拷贝
>>> dic2
{'one': ['one1', 'one2'], 'two': {'two1': 'hello', 'two2': 'world'}}
>>>
>>> dic["one"][0] = "change2" # 修改dic的第二层数据
>>> dic
{'one': ['change2', 'one2'], 'two': {'two1': 'hello', 'two2': 'world'}}
>>> dic2
{'one': ['change2', 'one2'], 'two': {'two1': 'hello', 'two2': 'world'}}
# 可见,当修改dic的第二层数据时,dic2也随之改变
>>>
>>> dic["one"] = "change1" # 修改dic的第一层数据
>>> dic
{'one': 'change1', 'two': {'two1': 'hello', 'two2': 'world'}}
>>> dic2
{'one': ['change2', 'one2'], 'two': {'two1': 'hello', 'two2': 'world'}}
>>>
# 浅拷贝总结:当进行浅拷贝时,修改dic的第二层数据时,会影响到dic2;而修改dic的第一层数据时,dic2不会随着dic的改变而改变;(修改dic2与修改dic同理,这里进列举修改dic的例子)

# 深拷贝
>>>
>>> import copy
>>> dic
{'one': ['one1', 'one2'], 'two': {'two1': 'hello', 'two2': 'world'}}
>>> dic2 = copy.deepcopy(dic) # 对dic进行深拷贝
>>> dic2
{'one': ['one1', 'one2'], 'two': {'two1': 'hello', 'two2': 'world'}}
>>>
>>> dic["one"][0] = "chage2" # 修改dic的第二层数据
>>> dic
{'one': ['chage2', 'one2'], 'two': {'two1': 'hello', 'two2': 'world'}}
>>> dic2
{'one': ['one1', 'one2'], 'two': {'two1': 'hello', 'two2': 'world'}}
>>>
# 可见,当修改dic的第二层数据时,dic2并没有随着dic的改变而改变
>>>
>>> dic["one"] = "CHAGE1"
>>> dic
{'one': 'CHAGE1', 'two': {'two1': 'hello', 'two2': 'world'}}
>>> dic2
{'one': ['one1', 'one2'], 'two': {'two1': 'hello', 'two2': 'world'}}
>>>
# 修改dic的第一层数据时,dic2也没有随之改变

# 深拷贝总结:当进行深拷贝时,两者都是相互独立的,不管修改哪一个,都不会影响到对方。

## 深浅拷贝总结:浅拷贝只是第一层是独立的,其他层公用;而深拷贝是每一层都是独立的,修改都不会影响到对方。

转载于:https://www.cnblogs.com/relax1949/p/9316337.html

浅谈python的深浅拷贝相关推荐

  1. js打印线程id_浅谈python中的多线程和多进程(二)

    原创:hxj7 本文继续分享一个关于python多线程和多进程区别的例子 前文<浅谈python中的多线程和多进程>中我们分享过一个例子,就是分别利用python中的多线程和多进程来解决高 ...

  2. 获得进程id_浅谈python中的多线程和多进程(二)

    原创:hxj7 本文继续分享一个关于python多线程和多进程区别的例子 前文<浅谈python中的多线程和多进程>中我们分享过一个例子,就是分别利用python中的多线程和多进程来解决高 ...

  3. python中内置的四种数值类型为_浅谈python语言四种数值类型

    Python语言支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下.希望对 ...

  4. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

  5. python中文字符串编码_浅谈python下含中文字符串正则表达式的编码问题

    前言 Python文件默认的编码格式是ascii ,无法识别汉字,因为ascii码中没有中文. 所以py文件中要写中文字符时,一般在开头加 # -*- coding: utf-8 -*- 或者 #co ...

  6. python老是报参数未定义_浅谈Python程序的错误:变量未定义

    Python程序的错误种类 Python程序的错误分两种.一种是语法错误(syntax error).这种错误是语句的书写不符合Python语言的语法规定.第二种是逻辑错误(logic error). ...

  7. python open找不到文件的原因_浅谈python在提示符下使用open打开文件失败的原因及解决方法...

    题目:在提示符下使用open打开一个文件 刚开始网上看了下打开的方式,结果一直实现不了,报错是没找到这个文件,而且和我输入的文件名不一样. 错误如下: >>>open('d:\456 ...

  8. python类中方法的执行顺序-浅谈Python的方法解析顺序(MRO)

    方法解析顺序, Method Resolution Order 从一段代码开始 考虑下面的情况: class A(object): def foo(self): print('A.foo()') cl ...

  9. python生成器和迭代器作用_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

最新文章

  1. 从特急到难产 光伏增补项目抢不抢630?
  2. ActionDescriptor 的认识
  3. C++ VARIANT 学习小记录
  4. python3 byte int string 互转 转换
  5. 【完结】12篇文章告诉你深度学习理论应该学到什么水平
  6. python 使用mysqldb模块通过ssh隧道连接mysql
  7. bootstrap-媒体对象-对齐
  8. php悬浮图片,在JS中如何实现图片居中悬浮效果
  9. 后台系统可扩展性学习笔记(十二)NoSQL
  10. HDU3788 ZOJ问题
  11. 格罗方德今年有望提高汽车芯片产量,并将投入60亿美元扩大产能
  12. Windows学习总结(5)——【IIS建站】Windows10怎么打开站点服务?
  13. 如何在中实现++中的splitterwnd的四分裂视图功能
  14. 计算机新安装系统后桌面上有什么图标,手把手教你全新安装完win10系统后如何设置显示桌面图标-系统操作与应用 -亦是美网络...
  15. 我为什么学习设计模式
  16. 一切皆是映射:浅谈操作系统内核的缺页异常(Page Fault)
  17. 人的一生,到底在追求什么?
  18. 抖音很火的公众号表白,每天定时发送给自己的女朋友
  19. 百度网盘下载资源太慢,教你一招,速度直接提升到10MB/s
  20. Docker容器引擎

热门文章

  1. Ubuntu 开机自动执行脚本
  2. 纪伯伦:我曾七次鄙视我的灵魂
  3. 【转】ADO.NET对数据库操作经典类
  4. 1200plc 虚拟轴_泡沫轴,哪里酸痛滚哪里,还能滚出完美曲线!
  5. GraphPad Prism 教程 :标准差与平均值的标准误差有什么区别
  6. python getopts_getopts用法
  7. Spring 数据访问那些事儿(二)Spring + JdbcTemplate
  8. 2017java最新面试题_2017年最新java面试题及答案
  9. docker的文件流处理_Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken...
  10. 安装ssr_12月23日先锋首测启动,累计登录3天必得SSR!