浅拷贝:拷贝引用 a = 1 # a指向存储1的内存空间 b = a # b指向a指向的存储空间 id(a) == id(b) # True id()用于获取对象的内存地址 a = 2 # a指向的内存地址改变 id(a) == id(b) # False print(b) # b还是等于1 b在a改变之前已经指向了 1,不会因为a的指向改变而改变 a = [1, 2, 3] b = a id(a) == id(b) a.append(4) # 此时并不是改变指向,只是添加了4,与重新赋值不一样 id(a) == id(b) print(a,b) a = dict(name='zhangsan', age=40, child_age=[10,11]) b = a.copy() # 这是浅拷贝 拷贝的是引用 a['name'] = 'a' print(a) # {'name': 'a', 'age': 40, 'child_age': [10, 11]} print(b) # {'name': 'zhangsan', 'age': 40, 'child_age': [10, 11]} a['child_age'].append(4) print(a) # {'name': 'a', 'age': 40, 'child_age': [10, 11, 4]} print(b) # {'name': 'zhangsan', 'age': 40, 'child_age': [10, 11, 4]} # 列表里面的切片是浅拷贝 a = [1, 2, 3, 4, 5, 6, 7, 8] b = a[1:4] import copy a = [1, 2] b = [3, 4] c = [a, b] d = copy.copy(c) # 浅拷贝 id(c[0]) == id(d[0]) # True id(c[1]) == id(d[1]) # True a.append(34) print(c) # [[1, 2, 34], [3, 4]] print(d) # [[1, 2, 34], [3, 4]] 深拷贝:会重新开辟一块内存空间 import copy a = [1, 2, 3] b = copy.deepcopy(a) id(a) == id(b) # False 深拷贝会重新开辟一个完全独立的内存空间 互不影响 a = [1, 2] b = copy.deepcopy(a) id(a) == id(b) # False 重新开辟一个内存空间 a = (1, 2) b = copy.deepcopy(a) id(a) == id(b) # True 这是因为元组是不可变的,所以不需要重新开辟一个空间