Python中浅拷贝copy与深拷贝deepcopy的简单理解
以下是个人对Python深浅拷贝的通俗解释,易于绕开复杂的Python数据结构存储来进行理解!
- 高级语言中变量是对内存及其地址的抽象,Python的一切变量都是对象。
- 变量的存储采用了引用语义的方式,存储的只是一个变量的值所对应的地址信息。
- 变量的每一次初始化(赋值),即将新的内容的地址赋给变量。
- 复杂数据结构存储的是各个元素的值得存储位置。
- 进行增删改等操作时不改变数据本身的id,改变的各个元素的地址引用。
- 改变任何一个拥有相同id的变量时,其他相同id的变量也会相应改变。
- copy.copy(object),拷贝的是内嵌套结构的地址引用,当内嵌套结构发生变化时,浅拷贝相应的改变。
- copy.deepcopy(object),完全复制与变量相关的数据!跟别的操作不再有关系!
实例:
import copy li = [4,5] lts = [1,2,3,li] lt_copy= copy.copy(lts) lt_deepcopy = copy.deepcopy(lts) lts.append(6) lt_copy.append(7) print(lts,lt_copy) #输出[1, 2, 3, [4, 5], 6] [1, 2, 3, [4, 5], 7] li.append(8) #内部表格li插入 print(lts,lt_copy,lt_deepcopy) #输出[1, 2, 3, [4, 5, 8], 6] [1, 2, 3, [4, 5, 8], 7] [1, 2, 3, [4, 5]] #可以看到当对li操作时,lt_deepcopy不受影响!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
相关推荐
-
浅述python中深浅拷贝原理
前言 在c++中参数传递有两种形式:值传递和引用传递.这两种方式的区别我不在此说,自行补上,如果你不知道的话.我先上python代码,看完我们总结一下,代码如下: # copy module import import copy # number and string a = 12 a1 = a a2 = copy.copy(a) a3 = copy.deepcopy(a) # look addr print("==========number=======") print(id(a)
-
Python浅拷贝与深拷贝用法实例
本文实例讲述了Python浅拷贝与深拷贝用法.分享给大家供大家参考.具体分析如下: >>> person=['name',['savings',100]] >>> hubby=person[:] >>> wifey=list(person) >>> [id(x) for x in person,hubby,wifey] [3074051788L, 3074061740L, 3074061996L] >>> [id(y
-
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解 列表赋值: >>> a = [1, 2, 3] >>> b = a >>> print b [1, 2, 3] >>> a[0] = 0 >>> print b [0, 2, 3] 解释:[1, 2, 3]被视作一个对象,a,b均为这个对象的引用,因此,改变a[0],b也随之改变 如果希望b不改变,可以用到切片 >>> b = a[:] &
-
Python直接赋值、浅拷贝与深度拷贝实例分析
本文实例讲述了Python直接赋值.浅拷贝与深度拷贝.分享给大家供大家参考,具体如下: 直接赋值:其实就是对象的引用(别名). 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象. 字典浅拷贝实例 实例 >>>a = {1: [1,2,3]} >>> b = a.copy() >>> a, b ({1: [1, 2, 3]}, {1: [1,
-
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
程序中常常需要复制一个对象, 按思路应该是这样的 a = [1, 2, 3] b = a # [1, 2, 3] print b 已经复制好了,但是现在得改变一下第一个元素的值把它改成5 b[0] = 5 # [5, 2, 3] print b # [5, 2, 3] print a 我改变了b的第一个元素的值,但是a的值也改变了,这是因为python中的=是引用.a和b指向的是相同的列表,所以改变列表会出现以上的结果. 解决方法是切片操作 a = [1, 2, 3] b = a[:] b[0]
-
Python中的深拷贝和浅拷贝详解
要说清楚Python中的深浅拷贝,需要搞清楚下面一系列概念: 变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝) [变量-对象-引用] 在Python中一切都是对象,比如说:3, 3.14, 'Hello', [1,2,3,4],{'a':1}...... 甚至连type其本身都是对象,type对象 Python中变量与C/C++/Java中不同,它是指对象的引用,Python是动态类型,程序运行时候,会根据对象的类型 来确认变量到底是什么类型. 单独赋值: 比如说: 复制代
-
Python中的赋值、浅拷贝、深拷贝介绍
和很多语言一样,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式. 在学习过程中,一开始对浅拷贝理解很模糊.不过经过一系列的实验后,我发现对这三者的概念有了进一步的了解. 一.赋值 赋值算是这三种操作中最常见的了,我们通过一些例子来分析下赋值操作: str例 复制代码 代码如下: >>> a = 'hello' >>> b = 'hello' >>> c = a >>> [id(x) for x in
-
深入浅析Python中list的复制及深拷贝与浅拷贝
在Python中,经常要对一个list进行复制.对于复制,自然的就有深拷贝与浅拷贝问题.深拷贝与浅拷贝的区别在于,当从原本的list复制出新的list之后,修改其中的任意一个是否会对另一个造成影响,即这两个list在内存中是否储存在同一个区域,这也是区分深拷贝与浅拷贝的重要依据.接下来我们就针对Python中list复制的几种方法,来探究一下其是属于深拷贝还是浅拷贝.弄清楚这个问题,有助于我们在编程中规避错误,减少不必要的调试时间. 一.非拷贝方法--直接赋值 如果用=直接赋值,是非拷贝方法.这
-
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepcopy 深拷贝 拷贝对象及其子对象一个很好的例子: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->import copya = [1, 2, 3, 4, ['a', 'b']] #原始对象b = a #赋值,传对象的引用c = copy.c
-
浅谈python的深浅拷贝以及fromkeys的用法
1.join()的用法:使用前面的字符串.对后面的列表进行拼接,拼接结果是一个字符串 # lst = ["alex","dsb",'wusir','xsb'] # s = "".join(lst) # print(s) #alexdsbwusirxsb 2.split() 根据你给的参数进行切割,切割的结果就是列表 需要把字符串转换成列表 split 把列表转化为字符串 join # s = "alex_dsb_wusir_xsb&q
-
浅析Python中的赋值和深浅拷贝
python中,A object = B object 是一种赋值操作,赋的值不是一个对象在内存中的空间,而只是这个对象在内存中的位置 . 此时当B对象里面的内容发生更改的时候,A对象也自然而然的会跟着更改. name = ["root","admin"] cp_name = name # 对cp_name进行赋值操作 # 对name列表进行插入 name.append('root_temp') print(name,cp_name) # ['root', 'a
随机推荐
- perl的格式化输出及chomp的重要性分析
- ASP.NET中弹出消息框的几种常见方法
- php简单防盗链验证实现方法 原创
- 隐藏修改文件时间和文件属性的ASP脚本
- 浅析c语言中的内存
- MySQL配置文件无法修改的解决方法(Win10)
- JavaScript四种调用模式和this示例介绍
- 一个jdbc 测试程序代码
- Javabean基于xstream包实现转XML文档的方法
- jQuery级联操作绑定事件实例
- vue中页面跳转拦截器的实现方法
- Win 2003轻松识别外来设备
- Mac环境下配置tomcat的步骤详解
- 详解nginx实现ssl反向代理实战
- 详解python中字典的循环遍历的两种方式
- C# 中DateTime 的使用技巧汇总
- 提取HTML标签
- c#调用api控制windows关机示例(可以重启/注销)
- Javascript 编码约定(编码规范)
- Python处理时间日期坐标轴过程详解