浅拷贝
------------copy模块里面的copy方法实现。浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象;改变原始对象中为不可变类型的元素的值,不会响拷贝对象。
网上举的例子或者实例都比较抽象,即使这次理解了,过段时间还是会忘。所以仔细总结了一下,我觉得浅拷贝可以比喻为:一个人买了两台同一型号的苹果X手机:苹果X2,是苹果X1的浅拷贝,外形,颜色,材质都一样,但是你给苹果x1套个壳,贴个膜的时候,苹果X2是不会有任何变化的,也就是:浅拷贝改变原始对象(X1)中为不可变类型的元素(壳,膜)的值,不会响拷贝对象(X2)。
但是当你用X1中自己的qq,发送了一条消息,再登录X2中自己的qq,相应的也增加了一条已发送的消息,因为X1和X2都同时连接同一个QQ号,共享同一个服务器,两台手机中的qq信息变化,是同时改变的,也就是:浅拷贝后,改变原始对象(X1)中为可变类型的元素(qq消息)的值,会同时影响拷贝对象(X2)
深拷贝
------------copy模块里面的deepcopy方法实现。深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。经过深拷贝后,原始对象和拷贝对象所有的可变元素地址都没有相同的了。
理解浅拷贝后,深拷贝就比喻为:两个人各自买了一台同型号的苹果X手机,这时候,无论是手机壳,手机膜,亦或者手机登录的QQ消息,两台手机都是独自存在的,他们共同点就是刚买的时候,外形,颜色材质一样,但是顾客怎么去改变手机,互不影响。
赋值
经过一段时间沉淀,我回顾自认为精通的深浅拷贝,发现实际操作结果和理论出现了偏差,经过整理,我混淆了赋值和浅拷贝。
赋值是:b = a
而浅拷贝:b = a.copy()