Python随笔---深浅拷贝
Python中为了避免某些方法的副作用(拷贝后有时更改原有数据),故存在有深浅拷贝的存在
浅拷贝导入copy方法集,使用copy_copy的方法进行
深拷贝一样导入copy方法集,使用copy_deepcopy方法进行
实例如下:
import copy l1={'k1':'alex','k2':'jack','k3':['gender','opem']} l2=copy.copy(l1) l3=copy.deepcopy(l1) l1['k1']='like' #更改原有数据值 print(l1) print(l2) print(l3) 运行结果: {'k1': 'like', 'k2': 'jack', 'k3': ['gender', 'opem']} #数据更改 {'k1': 'alex', 'k2': 'jack', 'k3': ['gender', 'opem']} {'k1': 'alex', 'k2': 'jack', 'k3': ['gender', 'opem']} 同样的若是更改深层的value中列表的值: import copy l1={'k1':'alex','k2':'jack','k3':['jack','Tom']} l2=copy.copy(l1) l3=copy.deepcopy(l1) l1['k3'][0]='like' #更改深层列表内值 print(l1) print(l2) print(l3) 运行结果: {'k1': 'alex', 'k2': 'jack', 'k3': ['like', 'Tom']} #数据更改 {'k1': 'alex', 'k2': 'jack', 'k3': ['like', 'Tom']} #数据更改 {'k1': 'alex', 'k2': 'jack', 'k3': ['jack', 'Tom']}
以上结果可知:
1:深浅拷贝都是针对内存的(虽然没有运行内存位置),占不同内存
2:若原有数据仅修改一层,则深浅拷贝后数据均不更改
3:若原有数据中修改深层,则浅拷贝数据变化,深拷贝数据不变
4:可使用[:]对元素切片,但不可应用到字典类型