浅拷贝:
有四种方式:
以列表举例
1.直接赋值
这种情况拷贝前后列表的地址一样,里边元素的地址也一样。对不可变数据类型修改,会导致进行修改的列表的元素地址改变,对可变数据类型的修改导致两个列表进行修改的元素都改变
2.切片赋值
这种情况拷贝前后列表的地址不一样,里边元素的地址一样。对不可变数据类型修改,会导致进行修改的列表的元素地址改变,对可变数据类型的修改导致两个列表进行修改的元素都改变
3.工厂函数(list(),tuple(),dict())
这种情况拷贝前后列表的地址不一样,里边元素的地址一样。对不可变数据类型修改,会导致进行修改的列表的元素地址改变,对可变数据类型的修改导致两个列表进行修改的元素都改变
4.copy方法
这种情况拷贝前后列表的地址不一样,里边元素的地址一样。对不可变数据类型修改,会导致进行修改的列表的元素地址改变,对可变数据类型的修改导致两个列表进行修改的元素都改变
深拷贝:
deepcopy()方法
这种情况拷贝前后列表的地址不一样,里边元素的地址也不一样(不可变数据类型也不变)。对不可变数据类型修改,会导致进行修改的列表的元素地址改变,对可变数据类型的修改导致两个列表只有进行修改的那个列表元素改变
不可变数据类型不存在拷贝
浅拷贝不进行数据拷贝,而是拷贝引用
深拷贝进行数据重新拷贝(除不可变数据类型)
如果元组中只有不可变类型,则不能进行拷贝