实质:
- 浅拷贝:定义一个新的变量名指向被拷贝的对象所指向的内存空间,及不创建新的内存存储数据,两个变量名指向同一个内存空间,如果这两个变量任意一个对其数据做出修改则另一个变量也发生变化。(可以理解成对该变量名进行的拷贝)
- 深拷贝:划分新的内存空间,将被拷贝的数据复制到新的内存空间并添加变量名,及将两个对象进行完全分离,当通过其中任意一个变量对其数据做出修改时另一的变量所的数据不发生改变。(可以理解成对该对象进行的递归拷贝将该对象的所有内容进行了拷贝)【使用deepcopy进行拷贝】
实例
- 赋值“=”:最简单的浅拷贝,对列表、字典等进行操作是相当于对变量名进行的一次浅拷贝。
a , b 指向同一内存空间,字典类似
- copy.copy 对嵌套列表进行操作
- 如图:浅copy只会copy最外层的列表,及c和d分别指向不同的列表,但是其中的元素的指向不变,及进行浅copy时内层元素仍指向原内存空间。只是对最外层进行copy。
- 深拷贝 deepcopy,对于一个对象所有层次的拷贝(递归)。
注意点:
- 浅拷贝对可变类型和不可变类型的
- copy.copy对可变类型进行浅拷贝
- copy.copy对不可变类型不进行浅拷贝,只进行引用
- copy.copy 和 copy.deepcopy的不同
- copy.copy对不同类型进行不同操作见上
- copy.deepdopy对指向空间进行递归拷贝
错误之处欢迎指出