python的赋值实际上是一种浅拷贝,Python深拷贝和浅拷贝详解
原标题:python深度复制和浅层复制的区别
python中浅层复制和深层复制的区别如下:
1.copy.copy轻型复制仅复制父对象,不复制对象的内部子对象。
2.copy.deepcopy深层复制复制对象及其子对象
如果复制的对象是一维链表,那么轻拷贝和深拷贝没什么区别,就是重新申请一个新的内存地址。
导入副本
列表1=[1,2,3,4]
打印(id(列表1))
list2=list1.copy()
打印(列表2)
打印(id(列表2))
打印(列表1是列表2)
list3=copy.deepcopy(list1)
打印(列表3)
打印(id(列表3))
打印(列表1是列表3)
96011592
[1, 2, 3, 4]
95979528
错误的
[1, 2, 3, 4]
31271112
错误的
所以list1的变化不会影响list2和list3。但是对于更复杂的列表,比如嵌套列表和字典嵌套列表。轻拷贝和深拷贝表现出完全不同的结果。
导入副本
列表1=[1,2,3,4,[5,6]]
打印(列表1的ID:,ID(列表1))
print( list 1的第4个元素的ID:,ID (List1 [4]))
#轻拷贝
list2=list1.copy()
打印(列表2)
打印(列表2的ID:,ID(列表2))
print( list 2的第4个元素的ID:,ID (List2 [4]))
#深层副本
list3=copy.deepcopy(list1)
打印(列表3)
打印(列表3的ID:,ID(列表3))
print( list 3的第4个元素的ID:,ID (List3 [4]))
#更改列表1中的元素
列表1[2]=7
列表1[4][1]=8
打印(列表1:,列表1)
打印(列表2:,列表2)
打印(列表3:,列表3)
#运行结果
列表1的id:95979528
1列表中第4个元素的ID 1:96011592
[1, 2, 3, 4, [5, 6]]
列表2的id:40773832
2链表第四个元素的id:96011592 #与子对象的ID值相同,这意味着浅拷贝并不拷贝对象,而只是使用链表的引用。
[1, 2, 3, 4, [5, 6]]
列表3的id:96023432
3列表第4个元素的ID 3:40773704
列表1: [1,2,7,4,[5,8]]
List: [1,2,3,4,[5,8]] #父对象不变,子对象改变
列表:[1,2,3,4,[5,6]] #父子对象不变
责任编辑:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。