Python浅拷贝与深拷贝
2019-06-30 本文已影响0人
Recalcitrant
Python浅拷贝与深拷贝
一、可变对象与不可变对象
见Python变量
二、copy模块
对象拷贝是指在内存中创建新的对象,产生新的内存地址。
- 浅拷贝只拷贝最外层对象,深拷贝还会递归拷贝内层对象。
- 无论是浅拷贝还是深拷贝,只拷贝mutable可变对象成为一个新对象,而immutable不可变对象还是原来的那个。
- 当顶层对象和它的子元素对象全都是immutable不可变对象时,因为没有产生新对象,所以不存在被拷贝。
1.浅拷贝
import copy
copy.copy()
-
顶层是mutable,子元素全是immutable
-
-
顶层是mutable,子元素部分immutable
-
- 顶层是immutable,子元素全是immutable
- 顶层是immutable,子元素部分mutable
2.深拷贝
import copy
copy.deepcopy()
- 顶层是mutable,子元素全是immutable
-
顶层是mutable,子元素部分mutable
-
- 顶层是immutable,子元素全是immutable
- 顶层是immutable,子元素部分mutable
三、其他拷贝方法
1. 列表的复制
列表的复制都相当于浅拷贝效果,有以下三种方式:
- 1.列表的copy()函数
- 2.list()转换函数
- 3.列表切片[:]
2. 元组的复制
使用分片[:]操作,相当于浅拷贝的效果。
3. 字典的复制
同列表类似,可以使用字典的copy()函数或者转换函数dict()。
4. 集合的复制
同列表类似,可以使用集合的copy()函数或者转换函数set()。