言简意赅的解释:
浅拷贝操作时拷贝的不够深,仅仅是对引用(地址)的拷贝,不涉及值。深拷贝是对对象资源(值)的拷贝。两种拷贝都会生成一个看起来相同的对象,他们本质的区别是拷贝出来的对象的元素地址是否和原对象一样,也就是地址复制还是值复制的区别。
phyon中对象分为可变对象和不可变对象。
可变对象:可以在不改变其地址的情况下,修改地址所指向的值,例如列表。
不可变对象:对象地址所指向的值是不能修改的,如果你修改了这个对象的值,那么对象的地址就改变了,这个对象也就不再是原来的对象了。所以无论是深拷贝还是浅拷贝,对不可变对象没有影响。
创建新对象的方法:
1)赋值:赋值操作是创建源对象的一个引用,源对象的id和新对象的id是一样的,一个对象修改另一个也会修改。
2)浅拷贝:源对象与新对象部分元素独立,是否完全独立取决于元素中是否有可变对象,如果有可变对象,则一个对象变化另一个也会随之变化
3)深拷贝:源对象与新对象完全独立
结论:
copy模块中无论是深拷贝deepcopy还是浅拷贝copy,都会创建一个新的对象,新对象的id与源对象的id不同,然后再进行元素的拷贝,这与直接赋值是不同的。
两种拷贝对不可变对象是没有影响的,需要注意的是可变对象的拷贝。