测试环境:python 2.7
需要使用到模块 copy.py
该模块内有两个方法
copy.copy() #浅拷贝
copy.deepcopy() #深拷贝
浅拷贝与深拷贝的区别:
浅拷贝只能拷贝第一层的内容
深拷贝可以拷贝从外到内n层的内容
请看例子:
list1 = [1,2,3,4]
list2 = list1
list1.append(99)
print list2
打印结果:list2 = [1,2,3,4,99]
说明:在python中,对变量进行引用类型的赋值时,相当于把地址赋值给了变量
对引用类型的介绍:http://www.cnblogs.com/gametesting/p/7159398.html
为了解决这个问题,我们可以使用切片操作:
list2 = list1[:]
同时,我们也可以引入浅拷贝的概念,只拷贝值
list1 = [1,2,3,4]
list2 = copy.copy(list1)
list1.append(99)
print list2
打印结果:list2 = [1,2,3,4]
修改list1的时候,并没有对list2进行修改
我们也可以在copy.copy()完成后,借助于id(list1),id(list2)对比,可以发现二者的内存地址并不相同,使用浅拷贝相当于把list1的值拷贝到一块新的内存区域,然后赋值给list2
但是,当list1 = [1,2,3,4,[1,2]] (操作对象超过一维的时候)时
我们使用浅拷贝,就没用了
(代码省略),使用浅拷贝后,发现,修改list1的值,还是会修改list2的值
这时候,我们就需要用到深拷贝copy.deepcopy()
list1 = [1,2,3,4,[1,2]]
list2 = copy.deepcopy(list1)
list1[4].append(99)
print list2
打印结果,完美解决问题