首页 > 编程学习 > 学习:python进阶 深浅拷贝

学习:python进阶 深浅拷贝

发布时间:2022/8/29 9:17:38

什么是拷贝?

原封不动地复制一份新的,在不同的内存地址上,修改旧的不会影响新的

 

【变量赋值不是拷贝】

list1=[1,2,[1,2]]

list2=list1

 

list1=[1,2,[1,2]]

list2=list1.copy()#浅拷贝,使用copy模块的copy方法,都是浅拷贝

 

 执行浅拷贝操作,将在开辟一块新的内存空间,然后list2绑定到这块内存空间上。

新内存空间中有三个位置用来存放其三个元素的内存地址

新拷贝的列表的三个位置分别绑定就列表三个位置上的元素的内存地址

所以修改就列表中的子列表时,会影响新列表中的值,因为它们还同步一部分内存空间

【深拷贝】

from copy import deepcopy

list1=[1,2,[1,2]]

list2=deepcopy(list1)

 

 深拷贝时,当元素是可变数据类型时,会重新开辟一块内存空间,存放这个元素对象的内存地址,且该元素内部的可变数据类型也会重新开辟内存空间,层层检查,层层拷贝

此时,新旧列表的子元素都不会共享内存地址,所有不会相互影响

【总结】

深浅拷贝讨论的拷贝对象是可变数据类型

深浅拷贝的区别在于:是否区分元素的可变还是不可变类型的判断

列表的切片也是浅拷贝,copy模块的copy.copy()函数是浅拷贝操作,和列表的内置方法copy()功能相同。

容器型数据类型的拷贝都存在深浅拷贝问题

深浅拷贝没有优缺点

 

Copyright © 2010-2022 mfbz.cn 版权所有 |关于我们| 联系方式|豫ICP备15888888号