博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的Python成长之路---第三天---Python基础(11)---2016年1月16日(雾霾)
阅读量:7157 次
发布时间:2019-06-29

本文共 1309 字,大约阅读时间需要 4 分钟。

三、深浅拷贝

  在Python中将一个变量的值传递给另外一个变量通常有三种:赋值、浅拷贝以及深拷贝

  讨论深浅拷贝之前我们把Python的数据类型分为基本数据类型包括数字、字符串、布尔以及None等,还有一种像列表、元祖、字典等属于有基本数据类型作为最基本的元素组成的

     在Python中基本数据类型的赋值、浅拷贝及深拷贝没有任何意义,都是指向同一块内存地址,也不存在层次的问题

>>> import copy>>> n1 = 'abc'>>> n2 = n1>>> n3 = copy.copy(n1)>>> n4 = copy.deepcopy(n1)>>> id(n1)140350336680040>>> id(n2)140350336680040>>> id(n3)140350336680040>>> id(n4)140350336680040

  说明:Python的copy模块的copy和deepcopy函数分别为我们实现了浅拷贝和深拷贝,我们可以看到,赋值、浅拷贝和深拷贝他们最后的id(Python内存地址的表达方式)都是一样的,没有分别

  现在讨论其他的字典,列表等这些非基本数据类型对象的赋值、浅拷贝及深拷贝的区别

  假设我们有这么一个字典n1 = {"k1": "abc", "k2": 123, "k3": ["abc", 123]} 

  1、赋值

  我们知道赋值及时将变量的内存赋个另一个变量,让另一个变量指向那个内存地址

 

>>> n1 = {
"k1": "abc", "k2": 123, "k3": ["abc", 123]} >>> id(n1)140350328984328>>> n2 = n1>>> id(n2) 140350328984328 # 可以看到内存地址和n1是完全一样的

  2、浅拷贝

  浅拷就是在内存中将第一层额外开辟空间进行存放

>>> n3 = copy.copy(n1)>>> id(n3)140350328986504 # 可以看n3的内存地址已经和n1不同了

   但是如果我们继续深入看一下n3里面的第二层的非基本数据类型的元素

>>> id(n1['k3'])140350328603976>>> id(n3['k3']) 140350328603976 # 字典里的列表还是指向同一个列表

  3、深拷贝

  深拷贝就是在内存中将数据从新创建一份,不仅仅是第一层,第二层、第三层...都会重新创建一份

 

>>> id(n1['k3'])140350328603976>>> id(n4['k3'])140350328604296 # 可以看到第二层的列表也拷贝了一份,内存地址已经完全不一样

  注意:这仅局限于非基本数据类型,基本数据类型还会是同一个内存地址

>>> id(n1['k1'])140350336680040>>> id(n4['k1'])140350336680040

 

转载于:https://www.cnblogs.com/zhangxiaxuan/p/5137854.html

你可能感兴趣的文章
java-maven
查看>>
链路聚合
查看>>
CodingTMD’s Reading List
查看>>
如何将可执行文件打包至APK并运行(转)
查看>>
值类型与引用类型
查看>>
<转>如何测试大型ERP软件?
查看>>
Python爬虫学习==>第一章:Python3+Pip环境配置
查看>>
大数据-09-Intellij idea 开发java程序操作HDFS
查看>>
小米4c jni调用CallStaticIntMethod报错问题解决
查看>>
centos7安装配置git
查看>>
Unattend.xml应答文件制作(WISM)
查看>>
Mysql中文乱码问题完美解决方案
查看>>
Linux编程 15 文件权限(用户管理 useradd,userdel,usermod,passwd,chpasswd,chsh, chfn,chage)
查看>>
Linux编程 21 shell编程(环境变量,用户变量,命令替换)
查看>>
神经网络和深度学习 笔记
查看>>
Python全栈学习_day010作业
查看>>
JAVA面向对象()上)
查看>>
搭建LNMP环境(CentOS 6)
查看>>
C# 面向对象零碎知识点
查看>>
【RMAN】使用RMAN的 Compressed Backupsets备份压缩技术 (转载)
查看>>