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的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 Python
Python中表达式x += y和x = x+y 的区别详解
Jun 20 Python
python实现随机梯度下降(SGD)
Mar 24 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
python DataFrame 修改列的顺序实例
Apr 10 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
Python中py文件转换成exe可执行文件的方法
Jun 14 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
对python中list的五种查找方法说明
Jul 13 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
Django权限控制的使用
Jan 07 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
海贼王:最美的悬赏令!
2020/03/02 日漫
深入解析php之sphinx
2013/05/15 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
JQuery扩展插件Validate 2通过参数设置验证规则
2011/09/05 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
Javascript中神奇的this
2016/01/20 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
js中new一个对象的过程
2017/02/20 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
python中pycurl库的用法实例
2014/09/30 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
python实现逻辑回归的示例
2020/10/09 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
实习鉴定评语
2014/01/19 职场文书
八年级生物教学反思
2014/01/22 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
十七岁的单车观后感
2015/06/12 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js
python​格式化字符串
2022/04/20 Python
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers