python中copy和deepcopy详解
python中标识一个对象唯一身份的是:对象的id(内存地址),对象类型,对象值。
deepcopy是真正意义上的复制,深拷贝,被复制对象完全复制一遍作为独立的新个体,新开辟一块空间。
浅拷贝,不会产生独立对象,等于赋值,只是对原有数据块打上新标签,其中一个标签改变,数据块就会变化。浅拷贝等于赋值,也可以通过copy实现,copy仅拷贝对象本身,浅拷贝不会对其中的子对象进行拷贝,如果对子对象进行修改,拷贝结果也会随着修改。
- 复制的对象中无复杂子对象,即列表中不嵌套列表,原来值的改变并不会影响浅复制的值,同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。
- 复制的对象中有复杂子对象 (例如列表中的一个子元素是一个列表)如果改变复杂子对象的值(列表中的值)会影响浅复制的值。
1 | import copy |
评论