1 """ 2 赋值、浅拷贝、深拷贝区别比较 3 """ 4 import copy 5 6 # 赋值 7 prototype_lst = [1, 2, 5, [78, 90]] 8 a = prototype_lst 9 prototype_lst.append(9) 10 print(prototype_lst, a) 11 12 """ 13 浅拷贝和深拷贝的区别体现在对象为嵌套型的可变数据类型上 14 首先还要明确一点,无论是浅拷贝还是深拷贝,拷贝对象后,是否会开辟新的内存取决于对象是否为可变数据类型, 15 可变的数据类型,都会开辟新内存,不可的变数据类型,则不会开辟新内存地址 16 """ 17 18 # 浅拷贝 19 prototype_lst.pop(-1) 20 shallow_b = prototype_lst.copy() 21 # 原始列表子对象发生变化,其被拷贝对象内部子对象也跟着改变 22 prototype_lst[-1].append(100) 23 print(prototype_lst, shallow_b) 24 25 # 深拷贝 26 deep_b = copy.deepcopy(prototype_lst) 27 # 原始列表子对象发生变化,其被拷贝对象内部子对象不变 28 prototype_lst[-1].append(0) 29 print(prototype_lst, deep_b) 30 # 不可变数据类型的浅拷贝和深拷贝有兴趣可以试一试
output:
[1, 2, 5, [78, 90], 9] [1, 2, 5, [78, 90], 9]
[1, 2, 5, [78, 90, 100]] [1, 2, 5, [78, 90, 100]]
[1, 2, 5, [78, 90, 100, 0]] [1, 2, 5, [78, 90, 100]]