直接复制和浅拷贝和深拷贝的区别,深拷贝与浅拷贝示意图

首页 > 经验 > 作者:YD1662022-10-24 22:39:34

概述

今天主要来看看Python中的浅拷贝和深拷贝内容,这里用一个实例来说明~


需求:

将一个列表的数据复制到另一个列表中。


思路:

使用列表[:],拿不准可以调用copy模块。


实现方法:

#!/usr/bin/python #将一个列表的数据复制到另一个列表中 import copy a=[1,2,3,4,['a','b']] b=a #赋值 c=a[:] #浅拷贝 d=copy.copy(a) #浅拷贝 e=copy.deepcopy(a) #深拷贝 #输出 print('================a改变前================') print('a=',a) print('b=',b) print('c=',c) print('d=',d) print('e=',e) a.append(5) a[4].append('c') #输出 print('================a改变后================') print('a=',a) print('b=',b) print('c=',c) print('d=',d) print('e=',e)

直接复制和浅拷贝和深拷贝的区别,深拷贝与浅拷贝示意图(1)

输出:

直接复制和浅拷贝和深拷贝的区别,深拷贝与浅拷贝示意图(2)


python的复制,深拷贝和浅拷贝的区别

一般有三种方法,

alist=[1,2,3,["a","b"]]

1、直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变

直接复制和浅拷贝和深拷贝的区别,深拷贝与浅拷贝示意图(3)


2、copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变

在浅拷贝时,拷贝出来的新对象的地址和原对象是不一样的,但是新对象里面的可变元素(如列表)的地址和原对象里的可变元素的地址是相同的,也就是说浅拷贝它拷贝的是浅层次的数据结构(不可变元素),对象里的可变元素作为深层次的数据结构并没有被拷贝到新地址里面去,而是和原对象里的可变元素指向同一个地址,所以在新对象或原对象里对这个可变元素做修改时,两个对象是同时改变的.

浅拷贝,原对象的list元素改变的话会改变当前对象,如果当前对象中list元素改变了,也同样会影响原对象。

直接复制和浅拷贝和深拷贝的区别,深拷贝与浅拷贝示意图(4)


3、深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

深拷贝就是完全跟以前就没有任何关系了,原来的对象怎么改都不会影响当前对象

直接复制和浅拷贝和深拷贝的区别,深拷贝与浅拷贝示意图(5)



觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~


直接复制和浅拷贝和深拷贝的区别,深拷贝与浅拷贝示意图(6)

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.