深浅拷贝

判断一个元素是否为某一类型:
  if type(元素) == object:
   
深浅复制:
  import copy
  浅复制:
    list2 = list1.copy
    list2 = copy.copy(list1)
     
  深复制:
    list3 = copy.deepcopy(list1)
     
  区别与联系:
    对于存储一般元素的列表没有区别
    都是将目标对象复制出一份新的
     
    对于复合对象(一个列表中存储的元素依旧为列表)有区别
    浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制,我只复制一个地址。

深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制。
     
例:
  import copy
  list1 = [1,2,3,[4,5,6],[7,8,9]]
  list2 = copy.copy(list1)
  list3 = copy.deepcopy(list1)
  print( id ( list1[3] ) )
  print( id ( list2[3] ) )
  # 这两个内存地址是相等的,说明 list2 只是引用了 list1 的 [4,5,6] ,复制了 [4,5,6] 的地址
  print( id ( list3[3] ) )
  # 内存地址与前两个不等,说明复制了里层的元素开辟了新的内存地址

上一篇:第三天


下一篇:list容器: splice()和merge()