1 #深浅拷贝 2 #浅拷贝1 1、直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变。 3 4 li1 =[1, 2, 3] 5 li2 = li1.copy() 6 li1.append(4) 7 print(f‘li1:{li1}, id:{id(li1)}‘) 8 print(f‘li2:{li2}, id:{id(li2)}‘) 9 print(‘*‘ * 100) 10 11 #浅拷贝2 (只拷贝最边一层) 2、copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变。 12 l1 =[1, 2, 3, []] 13 l2 = l1.copy() 14 15 l1[-1].append(‘a‘) 16 l1.append(4) 17 18 print(f‘id of l1:{id(l1)}, id of l2:{id(l2)}‘) 19 print(f‘l1:{l1}, id:{id(l1[-1])}‘) 20 print(f‘l2:{l2}, id:{id(l2[-1])}‘) 21 print(‘*‘ * 100) 22 23 #深拷贝 (无论多少层 都能拷贝出来) 3、深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变。 24 25 import copy 26 list1 =[1, 2, 3, []] 27 list2 = copy.deepcopy(list1) 28 list1[-1].append(‘拷贝‘) 29 print(f‘list1:{list1}, id:{id(list1[-1])}‘) 30 print(f‘list2:{list2}, id:{id(list2[-1])}‘)
原文:https://www.cnblogs.com/z20010906/p/14293585.html