copy模块主要用于数据之间的拷贝,有两种基本的拷贝形式,浅复制和深复制。
对于浅复制,只复制一层数据,如果复制的数据中有嵌套数据,嵌套部分的数据并不会被复制,而是通过指针去指向原有数据,如果改变被复制的值,原有数据中的内容也会被改变
对于深复制,复制所有的层级关系,包括嵌套的部分,当改变被复制的值时,原有数值不变
示例
从上图可以看出,更改浅复制列表中嵌套内容之后,之前的列表内容也会随之发生变化,而深复制列表中不存在此问题
对于copy而言,在某些情况下与“=”的功能类似,都能实现复制的功能,但是用“=”时是创建了一个变量,与初始变量相同,更改复制之后的变量同时会改变原有变量,不管其在数据的哪一层。
从上层可以看出,通过=赋值时lst_1和lst_5占用相同内存地址,为同一对象,所以修改lst_5时原有元素也会被修改;但是通过copy复制时,复制前后两个变量并不是同一个对象,改变lst_6中第一层的数据也不会对原有的数据造成影响
以上的内容简介适用于可变对象,比如列表,对于不可变对象,如字符串,=和copy作用一致,由于数据类型不可变,复制之后的变量与原始变量为两个不同的变量,改变复制之后的变量对于原始变量没有任何影响。
领取专属 10元无门槛券
私享最新 技术干货