Python浅拷贝深拷贝之copy、deepcopy

2023-05-27 0 520

讲义历史记录20221205:

对个人归纳:

1,二者基本上差别并不大;

2,在牵涉到子第一类这时候,二者才有差别;

3,在牵涉到子第一类,且子第一类的操作方式后物理地址没出现改变(如下表所示方标识符:dic1[one].append(4)),此时才有差别,即拷贝后的新第一类,是copy的会出现改变、是deepcopy的不能出现改变

# 浅复本(copy()):复本父第一类,不能复本第一类外部的子第一类。范例如下表所示: # 条目总括:li2展开copy了li1,li1变动,li2不能变动: li1 = [1,2,3] li2 = li1.copy() print(li1:,li1,li2:,li2) # li1: [1, 2, 3] li2: [1, 2, 3] li1.append(4) print(li1:,li1,li2:,li2) # li1: [1, 2, 3, 4] li2: [1, 2, 3] # 但在下面的例子中看不出来子第一类父第一类亲密关系,那他们用下面那个范例: 归纳: 1,父第一类出现了变动,拷贝后的新第一类不能出现改变 2,当父第一类没出现改变,不管怎样子第一类出现了变动: 2.1,子第一类的物理地址没变动,所以拷贝后的新第一类会出现改变 2.2,子第一类的物理地址有变动,所以拷贝后的新第一类不能出现改变 # 词典总括: dic1 = {one:[1,2,3],two:[4,5,6]} dic2 = dic1.copy() # dic1: 2488946315520 {one: [1, 2, 3], two: [4, 5, 6]} # dic2: 2488946315520 {one: [1, 2, 3], two: [4, 5, 6]}, # dic1和dic2是独立的第一类,但它们的子第一类[1,2,3]还是指向统一的第一类,物理地址print(dic1:,id(dic1[one]),dic1,dic2:,id(dic2[one]),dic2) # 2,当父第一类没出现改变,不管怎样子第一类出现了变动: # 2.1,子第一类的物理地址没变动,所以复制后的新第一类会出现改变 # 直接append,虽然子第一类出现了变动,但因为2.1:子第一类的物理地址没变动,所以dic2的键one的值,也随之出现改变 dic1[one].append(4) # dic1: 2488946315520 {one: [1, 2, 3, 4], two: [4, 5, 6]} # dic2: 2488946315520 {one: [1, 2, 3, 4], two: [4, 5, 6]} print(dic1:,id(dic1[one]),dic1,dic2:,id(dic2[one]),dic2) # 2,当父第一类没出现改变,不管怎样子第一类出现了变动: # 2.2,子对象的物理地址有变动,所以拷贝后的新第一类不能出现改变 # 直接对词典第一类展开操作方式,对one键展开重新赋值,所以满足2.2:子第一类的物理地址有变动,此时dic2不能出现改变 dic1[one] = [7,8,9] # dic1: 2043613030208 {one: [7, 8, 9], two: [4, 5, 6]} # dic2: 2043612942528 {one: [1, 2, 3, 4], two: [4, 5, 6]} print(dic1:,id(dic1[one]),dic1,dic2:,id(dic2[one]),dic2) # 1,父第一类出现了变动,拷贝的第一类不能出现改变dic3 = {one:[1,2,3],two:[4,5,6]} dic4 = dic3.copy() # 直接对词典第一类展开操作方式,新增一个键值对,此时dic2不能出现改变 dic3[three] = [7,8] # dic3: {one: [1, 2, 3], two: [4, 5, 6], three: [7, 8]} # dic4: {one: [1, 2, 3], two: [4, 5, 6]}print(dic3:,dic3,dic4:,dic4) # 1,父第一类出现了变动,拷贝的第一类不能出现改变 dic5 = {one:[1,2,3],two:[4,5,6]} dic6 = dic5.copy() dic5.popitem()# 删除最后一个键值对 # dic5: {one: [1, 2, 3]} # dic6: {one: [1, 2, 3], two: [4, 5, 6]}print(dic5:,dic5,dic6:,dic6) # 深复本(deepcopy()):是copy模块中的方法,完全复本了子第一类和父第一类,范例如下表所示: # 深度复本, dic8完全复本了dic7父第一类及其子第一类,二者是完全独立的 from copy import deepcopy dic7 = {one:[1,2,3],two:[4,5,6]} dic8 = deepcopy(dic7) dic7[one].append(4) # dic7: {one: [1, 2, 3, 4], two: [4, 5, 6]} # dic8: {one: [1, 2, 3], two: [4, 5, 6]} print(dic7:,dic7,dic8:,dic8)
Python浅拷贝深拷贝之copy、deepcopy
Python浅拷贝深拷贝之copy、deepcopy
Python浅拷贝深拷贝之copy、deepcopy

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务