python中copy和deepcopy区别:
- 复制不可变数据类型(数值,字符串,元组),不管copy和deepcopy,都是同一个地址,当浅复制的值是不可变对象时和=“赋值”的情况一样,对象的id值与浅复制原来的值相同。
- 复制的值是可变对象(列表和字典)
- 浅拷贝copy有两种情况:
第一种情况:复制的 对象中无 复杂 子对象,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。
第二种情况:复制的对象中有 复杂 子对象(例如列表中的一个子元素是一个列表),改变原来的值中的复杂子对象的值,会影响浅复制的值。
- 深拷贝deepcopy:
完全复制独立,包括内层列表和字典
- python变量可以分为两种类型:
不可变类型:一旦创建就不可以修改的对象,包括:数组、字符串、元组
可变类型:可以修改的对象,包括:列表、字典
- 直接赋值:其实就是对象的引用(别名)
- 切片:切片技术应用于所有的序列,包括:列表、字符串、元组。但切片不能应用与字典。对字典只能使用D.copy()方法或D.deepcopy()方法
- 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象
- 深拷贝(deepcopy):copy模块的deepcopy方法,完全拷贝了父对象及其子对象