Python深拷贝浅拷贝图文示例清晰整理

python共有两种浅拷贝的方法,一个是python的内置函数copy(),另一个是copy模块中的copy.copy()。

python的六种数据类型(数字、字符串、列表、元组、字典、集合)中,数字、字符串、元组这三个不可变类型是没有copy()这个属性的,但是可以用copy.copy()进行浅复制。

本文以copy模块中的copy()和deepcopy()来说说两者的区别。

如上图所示,浅拷贝只拷贝了父对象,不会拷贝里面的子对象。如果拷贝的数据改变了父对象中的值,是不会影响源数据中父对象的值。反之如果拷贝的数据改变了子对象的值,是会影响源数据中子对象的值的。

如上图,相比于浅拷贝,深拷贝是将父对象、子对象一起复制出来,且重新开辟了内存来存储。而且对于复制出来的数据,修改父对象、子对象都不会影响源数据。

两者相比来说,浅拷贝比较省内存,而深拷贝数据更安全,修改的时候不会影响源数据,不会出现莫名其妙的bug。

以上就是Python深拷贝浅拷贝图文示例清晰整理的详细内容,更多关于Python深拷贝浅拷贝的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解python深浅拷贝区别

    在Python中对象的赋值其实就是对象的引用.当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已. 浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已.也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制 深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用.也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制. 深浅拷贝的作用 1,减少内存的使用 2,以后在做数据的清洗.修改或者入库的时候,对原数据进行复制一份

  • Python中五种列表拷贝的方法

    目录 1. 赋值操作 2. 使用copy操作 3. 使用list()构造函数 4. 使用索引 5. 列表生成式 6 总结 1. 赋值操作 最容易想到的就是我们可以使用赋值操作来直接复制列表, 代码如下: copied_list=original_list 此时,original_list 和copyed_list 都将指向同一个列表对象. 举例如下: original_list=[1,2,3] #Copying list using assignment operation copied_lis

  • Python中浅拷贝的四种实现方法小结

    目录 方式一:使用切片 [:] 方式二:使用工厂函数 方式三:使用数据类型自带的 copy 方法 方式四:使用 copy 模块的 copy 方法 方式一:使用切片 [:] 列表 # 浅拷贝 [:] old_list = [1, 2, [3, 4]] new_list = old_list[:] old_list.append(5) old_list[2][0] += 97 print("Old list:", old_list, "old list id:", id

  • Python 的赋值,浅拷贝和深拷贝详解

    目录 先明确几点 赋值 浅拷贝 深拷贝 总结 先明确几点 不可变类型:该数据类型对象所指定内存中的值不可以被改变. (1).在改变某个对象的值时,由于其内存中的值不可以被改变,所以,会把原来的值复制一份再进行改变,这样就会计算机会开辟一段新的内存空间来存储新的值. 可变类型:该数据类型的对象所指定的地址上面的值可以被改变. (1).变量被改变后,其所指向的内存地址上面的值,直接被改变,没有发生复制行为,也没有发生开辟新的内存地址行为,不会重新开辟空间. 变量:是一个系统表的元素,拥有指向对象的连

  • Python列表的浅拷贝与深拷贝

    目录 一.浅拷贝(均是只对第一层进行深拷贝) 1.for循环依次赋值 2.使用copy()函数 3.使用列表生成式 4.使用索引[:] 二.深拷贝 对列表深拷贝就是无论怎样改动新列表(单维or多维),原列表都不变. 而下面的浅拷贝,对于多维列表,只是第一维深拷贝了(嵌套的List保存的是地址,复制过去的时候是把地址复制过去了),所以说其内层的list元素改变了,原列表也会变. 一.浅拷贝(均是只对第一层进行深拷贝) 1. for循环依次赋值 old = [1, [1, 2, 3], 3] new

  • 对于Python深浅拷贝的理解

    1,浅拷贝是什么? 浅拷贝是对于一个对象的顶层拷贝,通俗的理解是:拷贝了引用,并没有拷贝内容 通过a=b这种方式赋值只是赋值的引用(内存地址),a和b都指向了同一个内存空间,所以他们的id(地址相同),这种就是浅拷贝 2,深拷贝是什么? 通过调用copy包里的deepcopy方法来深拷贝,其实就是在内存区在分配保存了和a相同的数据,用c来指向它,和a的内存地址不同.怎么验证就是我说的这种情况的呢?用下图来说明吧: 可以看出向a 添加一个元素,通过浅拷贝的b也随着改了,但是通过深拷贝的c没改,可以

  • Python深拷贝浅拷贝图文示例清晰整理

    python共有两种浅拷贝的方法,一个是python的内置函数copy(),另一个是copy模块中的copy.copy(). python的六种数据类型(数字.字符串.列表.元组.字典.集合)中,数字.字符串.元组这三个不可变类型是没有copy()这个属性的,但是可以用copy.copy()进行浅复制. 本文以copy模块中的copy()和deepcopy()来说说两者的区别. 如上图所示,浅拷贝只拷贝了父对象,不会拷贝里面的子对象.如果拷贝的数据改变了父对象中的值,是不会影响源数据中父对象的值

  • Python深拷贝与浅拷贝用法实例分析

    本文实例讲述了Python深拷贝与浅拷贝用法.分享给大家供大家参考,具体如下: 1.对象的赋值 对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 当对对象做赋值或者是参数传递或者作为返回值的时候,总是传递原始对象的引用,而不是一个副本.如下所示: 在python中将一个变量赋值给另一个变量,传递的是引用.无论是a的内层变化还是外层变化,b都会发生同样的变化.因为b和a指向了同一个引用.类似于c语

  • Python基础常用内建函数图文示例解析

    目录 abs() all() any() bin() bool() callable() abs() 返回一个数字的绝对值,它的参数可以是整数或者浮点数.举个例子: all() 参数为一个可迭代对象,如果该可迭代对象所有元素的真值都为True(或者可迭代对象为空),则返回True.它等价于: 举个例子: any() 和all()函数相对应,如可迭代对象所有元素中只要有一个元素真值为True,那么就返回True,如果这个可迭代对象是空的,则返回True.它等价于: 举个例子: bin() 将整数转

  • python 中赋值,深拷贝,浅拷贝的区别

    目录 一.赋值实例 二.浅拷贝实例 三.深拷贝实例 赋值:其实就是对象的引用(相当于取别名). 浅拷贝(copy):拷贝父对象,不会拷贝对象内部的子对象,会引用子对象. 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象. 一.赋值实例 # a这个大列表是一个父对象,里面的小列表是a的一个子对象 a = [1, 2, 3, ["a", "b"]] # 赋值实例 b = a print("a:", a

  • Python深拷贝与浅拷贝引用

    目录 (1).存在父对象和子对象 (2).如果只存在父对象 前言: 在Python中,对象赋值在本质上是对对象的引用,当创建一个对象把它赋值给另一个变量的时候,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用,这里通过程序,借用Python中的copy模块进一步理解深拷贝.浅拷贝和对象赋值有什么不同. 这里分两种情况: (1).存在父对象和子对象 演示代码如下: import copy   #调用copy模块 Dict = {'animal':'cat','num':[10,20,30

  • python图片合成的示例

    python的PIL库简直好用的不得了,PIL下面的Image库更是封装了很多对图片处理的函数,关于Image库的介绍和使用,看这里:http://effbot.org/imagingbook/image.htm 这里用我半个月前看到的一篇博客写的demo作为背景,做一下图片的合成 图片可以看作是很多像素点组成的,每个像素点都是一个RGB颜色,(red, green, blue), 那么合成两张照片就有办法了,我们可以在一张新的RGB色的图片里一个像素点取图片一的对应位置的像素,下一个像素点取图

  • python实现图像识别的示例代码

    一.安装库 首先我们需要安装PIL和pytesseract库. PIL:(Python Imaging Library)是Python平台上的图像处理标准库,功能非常强大. pytesseract:图像识别库. 我这里使用的是python3.6,PIL不支持python3所以使用如下命令 pip install pytesseract pip install pillow 如果是python2,则在命令行执行如下命令: pip install pytesseract pip install PI

  • Python实现边缘提取的示例代码

    目录 复习 一.边缘提取 1.什么是边缘 2.什么是边缘提取 二.Sobel算子 三.Canny边缘检测算法 1.算法步骤 2.高斯平滑 3.非极大值抑制 4.双阈值检测 四.相关代码 复习 (1)梯度: 梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模) (2)线性滤波 可以说是 图像处理 最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果 一.边缘提取 1.什么是边缘 图象

  • Seata AT模式TM处理流程图文示例详解

    目录 TM的作用 源码分解 小结 TM的作用 我们根据源码解读画出了下图,该图示展现了TM在整个Seata AT模式的分布式事务中所起的作用: 从上图中可以看出,TM主要有两个作用: 开启分布式事务,以拿到XID作为分布式事务开启的标识:一定是从TC拿到XID,不是从调用方传递过来的XID: 根据所有RM的处理结果来决定是提交分布式事务还是回滚分布式事务: 转换成伪代码如下: try{ // 开启分布式事务 String xid = TM.beginGlobalTransaction(); //

  • 详解C++中String类模拟实现以及深拷贝浅拷贝

    详解C++中String类模拟实现以及深拷贝浅拷贝 在C语言中/C++中,字符串是一个应用很广泛的类型,也是很基础的类型,C语言并没有直接处理字符串的操作而是采用字符指针和字符串数组进行操作,而在C++中标准库为我们封装了一个字符串的类供我们使用,使用需要#inlcude <string>头文件.我们也可以自己模拟实现一个简单的String类. 在模拟实现String类的过程中,不可避免的会遇到深拷贝浅拷贝的问题,下面就深拷贝浅拷贝做一个简介.所谓深拷贝浅拷贝,简单来说就是浅拷贝只是简单的将值

随机推荐