深浅拷贝
一、数据为不可变类型 (str、int、bool)


import copy v1 = "abc" v2 = copy.copy(v1) v3 = copy.deepcopy(v1) print(v1 == v2) print(v1 is v2) print(v1 is v3) 输出结果: True True True
小结:数据为不可变类型时,浅和深拷贝的值一样,且指向同一内存地址。(不考虑小数据池)
二、数据为可变类型 (list、set、dict)
1、没有嵌套的情况


import copy v1 = [1,2,3,4,5] v2 = copy.copy(v1) v3 = copy.deepcopy(v1) print(v1 == v2 == v3) print(v1 is v2) print(v1 is v3) 输出: True False False
小结:没有嵌套的情况,深浅拷贝也是一样的,都拷贝第一层。
2、有嵌套的情况:


import copy v1 = [1,2,3, [4, 5, 6]] v2 = copy.copy(v1) v3 = copy.deepcopy(v1) print(v1 == v2 == v3) print(v1 is v2) print(v1 is v3) print(v1[3] is v2[3]) print(v1[3] is v3[3]) print(v2[3] is v3[3]) print(v1[3][0] is v2[3][0]) print(v1[3][0] is v3[3][0]) print(v2[3][0] is v3[3][0]) 输出: True False False True False False True True True
小结:在嵌套的情况下:
浅拷贝:拷贝第一层
深拷贝:拷贝嵌套下面所有可变类型
总结:
浅拷贝:只拷贝第一层
深拷贝:拷贝嵌套层次中的所有可变类型