Python基础教程之浅拷贝和深拷贝实例详解


Posted in Python onJuly 15, 2017

Python基础教程之浅拷贝和深拷贝实例详解

           网上关于Python的深拷贝和浅拷贝的文章很多,这里对三种拷贝进行比较并附实例,大家可以参考下

一般的复制

#encoding:utf-8
#定义一个嵌套集合
lista=[1,2,3,[4,5,6,[7,8,9]]]

listb=lista
#分别打印出 lista和listb的地址值
print id(lista) #4511103096
print id(listb) #4511103096

#修改lista中的内容,listb中的内容也会跟着修改

lista[0]=0
print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]
print listb #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]

通过以上实践会发现,复制操作就是将lista在内存中指向的地址,也让listb指向他,本身并没有在内存中创建地址。

浅拷贝

#encoding:utf-8
#定义一个嵌套集合
import copy
lista=[1,2,3,[4,5,6,[7,8,9]]]
#使用copy模块中copy方法
listb=copy.copy(lista)

print id(lista) #4396231640

print id(listb) #4396231712

#发现lista和listb在内存中的地址有区别,
#打印元素中的第一个元素的地址值
print id(lista[0])#140666751466536

print id(listb[0])#140666751466536

#元素的地址值是一样的,是不是意思就是,改变lista中的第一个元素,
# listb中的也要改变呢

lista[0]=0

print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]

print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]]

#结果发现,竟然没有跟着lista一起改变,为什么呢,因为使用了浅拷贝呗
#我们在打印下lista[0]和listb[0]的地址
print id(lista[0]) #140666751466560

print id(listb[0]) #140666751466536

#会发现lista[0]重新指向内存中的其他地址


#这时候可以通过以上的方法,修改lista[3],lista[3]也是一个list

print id(lista[3])#4499779240

print id(listb[3])#4499779240

#修改lista[3]中第一个元素呢

lista[3][0]=0

print lista #[0, 2, 3, [0, 5, 6, [7, 8, 9]]]

print listb #[0, 2, 3, [0, 5, 6, [7, 8, 9]]]

#发现修改lista[3][0]元素的值,listb[3][0]也会跟着改变

根据以上实践说明,浅拷贝对对象中对象没有拷贝。

深拷贝

#encoding:utf-8
  #定义一个嵌套集合
  import copy
  lista=[1,2,3,[4,5,6,[7,8,9]]]

  #深拷贝功能是在浅拷贝上做的加强,所以具备浅拷贝的功能
  listb=copy.deepcopy(lista)

  lista[3][0]=0

  print lista #[1, 2, 3, [0, 5, 6, [7, 8, 9]]]

  print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]]

  #深拷贝会解决修改lista[3][0]值不会影响listb中的值

  #再来修改下第三层列表中元素是不是也完成拷贝

  lista[3][3][0]=0

  print lista #[1, 2, 3, [0, 5, 6, [0, 8, 9]]]

  print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]]

  #没有受到任何影响

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
python实现爬虫统计学校BBS男女比例(一)
Dec 31 Python
基于Python Shell获取hostname和fqdn释疑
Jan 25 Python
Pycharm无法使用已经安装Selenium的解决方法
Oct 13 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
Python socket实现多对多全双工通信的方法
Feb 13 Python
Python3实现的判断回文链表算法示例
Mar 08 Python
python读取图片的几种方式及图像宽和高的存储顺序
Feb 11 Python
python使用openpyxl操作excel的方法步骤
May 28 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
Python3 ffmpeg视频转换工具使用方法解析
Aug 10 Python
python 如何上传包到pypi
Dec 24 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
Apr 20 Python
Python利用flask sqlalchemy实现分页效果
Aug 02 #Python
Python实现发送QQ邮件的封装
Jul 14 #Python
python记录程序运行时间的三种方法
Jul 14 #Python
python运行其他程序的实现方法
Jul 14 #Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 #Python
Python学习教程之常用的内置函数大全
Jul 14 #Python
python与C互相调用的方法详解
Jul 14 #Python
You might like
用文本文件制作留言板提示(下)
2006/10/09 PHP
php str_replace的替换漏洞
2008/03/15 PHP
php抓取页面的几种方法详解
2013/06/17 PHP
迁移PHP版本到PHP7
2015/02/06 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
PHP模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
2018/05/21 PHP
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
JQuery中$之选择器用法介绍
2011/04/05 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
jquery滚动条插件slimScroll使用方法
2017/02/09 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
Python操作列表的常用方法分享
2014/02/13 Python
python中遍历文件的3个方法
2014/09/02 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
深入了解Python enumerate和zip
2020/07/16 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
养殖人员的创业计划书范文
2013/12/26 职场文书
魅力教师事迹材料
2014/01/10 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
员工考勤管理制度
2015/08/06 职场文书