原标题:从底层剖析Python深浅拷贝
拷贝的用途
拷贝就是copy,目的在于复制出一份一模一样的数据。使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不同的操作。
值得一提的是绝大部分编程语言中对于copy都有深浅拷贝的概念,所以充分的理解本章节的知识也是在为今后学习其他编程语言少走弯路。
在Python中,除开手动deepcopy(),其他的任何操作都是浅拷贝。
Python = 赋值示例
好了,废话不多说。直接进入主题,上代码:
尝试修改li1,查看li2的变化:
赋值结论:
本体
1.修改不可变类型数据(如:第一层的str)
2.修改可变数据类型中的数据(如:第二层小容器list中的数据)
对应关系
拷贝体
1.不保持原本体中的值,跟随本体变化
2.不保持原本体中的值,跟随本体变化
底层原理
Python 浅拷贝示例
浅拷贝,用到list数据类型自带的方法,copy()。我们来看一看会怎么样:
尝试修改li1,查看li2的变化:
浅拷贝结论:
本体
1.修改不可变类型数据(如:第一层的str)
2.修改可变数据类型中的数据(如:第二层小容器list中的数据)
对应关系
拷贝体
1.保持原本体中的值,不发生变化
2.不保持原本体中的值,跟随本体变化
底层原理
Python 深拷贝示例
使用深拷贝需要导入Python的内置库,copy,具体使用方式还是看代码:
尝试修改li1,查看li2的变化:
深拷贝结论:
本体
1.修改不可变类型数据(如:第一层的str)
2.修改可变数据类型中的数据(如:第二层小容器list中的数据)
对应关系
拷贝体
1.保持原本体中的值,不发生变化
2.保持原本体中的值,不发生变化
底层原理
其他图示
b = a: 赋值引用,a 和 b 都指向同一个对象。
b = a.copy():浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
责任编辑: