python的赋值实际上是一种浅拷贝,Python深拷贝和浅拷贝详解

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: