浅拷贝只会对可变数据类型的第一层数据进行拷贝,而不会对内部的元素进行拷贝,拷贝成功后会开辟一个新的内存地址。对不可变数据类型进行拷贝时,实际上是对引用的一个拷贝,两个变量指向同一个内存地址。
在python中,使用浅拷贝是使用内置模块copy中的copy方法表示浅拷贝
import copy # 不可变数据类型 num1 = 1 num2 = copy.copy(num1) print(id(num1), id(num2)) # 1564069134576 1564069134576 # 可变数据类型 list1 = [1,2] list2 = copy.copy(list1) print(id(list1), id(list2)) # 1940269990784 1940269955456 # 可变数据类型内部的元素 print(id(list1[1]), id(list2[1])) # 2465533853968 2465533853968
上面例子中只举了部分数据类型。
深拷贝深拷贝也只会对可变数据类型进行拷贝,但是与浅拷贝不同的是,深拷贝对可变数据类型拷贝时,还会对内部的元素进行检查,如果内部的元素也是可变数据类型,则也会进行拷贝,而浅拷贝只对对第一层数据进行拷贝,不会对内部元素进行拷贝。拷贝成功后则会开辟新的内存空间存放拷贝后的数据。
在python中,深拷贝是使用内置模块copy中的deepcopy命令表示
# 不可变数据类型 num1 = 1 num2 = copy.deepcopy(num1) print(id(num1), id(num2)) # 1533418143984 1533418143984 # 可变数据类型 list1 = [1,2,(1,2),[1,2]] list2 = copy.deepcopy(list1) print(id(list1), id(list2)) # 2342170559360 2342170524032 # 可变数据类型内部的元素 print(id(list1[2]), id(list2[2])) # 2342167324736 2342167324736 print(id(list1[3]),id(list2[3])) # 3058500666240 3058500631616



