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])}')