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判断质数(素数)的简单方法讲解
May 05 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
Python变量赋值的秘密分享
Apr 03 Python
python 重定向获取真实url的方法
May 11 Python
详解Numpy中的广播原则/机制
Sep 20 Python
详解如何将python3.6软件的py文件打包成exe程序
Oct 09 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
Django中FilePathField字段的用法
May 21 Python
python3 循环读取excel文件并写入json操作
Jul 14 Python
Python3利用openpyxl读写Excel文件的方法实例
Feb 03 Python
python pyhs2 的安装操作
Apr 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
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
php递归函数怎么用才有效
2018/02/24 PHP
laravel 框架实现无限级分类的方法示例
2019/10/31 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
2020/09/10 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
Python Socket传输文件示例
2017/01/16 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
OpenCV 轮廓检测的实现方法
2019/07/03 Python
python写入文件自动换行问题的方法
2019/07/05 Python
在django中自定义字段Field详解
2019/12/03 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
css3通过scale()、rotate()实现放大、旋转
2020/03/19 HTML / CSS
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
团队口号大全
2014/06/06 职场文书
绘画专业自荐信
2014/07/04 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
高温慰问简报
2015/07/21 职场文书
python3.7.2 tkinter entry框限定输入数字的操作
2021/05/22 Python