通过代码和结果来理解浅拷贝和深度拷贝,先来看看python中有那些常见的浅拷贝方法:
1.使用数据类型本身的构造器:
l1 = [1,2,3]
l2 = list(l1)
l1 == l2 #True
l1 is l2 #False
#l2就是l1的浅拷贝,set、dict与上面的浅拷贝一致
t1 = (1,2,3)
t2 = tuple(t1)
t1 == t2 #True
t1 is t2 #True
#由于tuple不可变,tuple返回一个指向相同元组的引用,与list、set、dict不一样
2.通过切片操作符‘:’完成浅拷贝:
l1 = [1, 2, 3]
l2 = l1[:]
l1 == l2 #True
l1 is l2 #False
3.python中提供的函数copy.copy(),适用于任何数据类型:
import copy
l1 = [1, 2, 3]
l2 = copy.copy(l1)
l1 == l2 #True
l1 is l2 #False
浅拷贝,是指重新分配一块内存,创建一个新对象,里面的元素是原对象中子对象的引用。如果元素可变(list、set、dict),浅拷贝会带来一些副作用。如果元素不可变(Number、String、Tuple),就没有这些副作用。