Python深淺copy

ckxllf發表於2019-12-02

  深淺copy

  資料型別的分類

  可變(不可雜湊)的:list dict set

  不可變(可雜湊)的:str bool int tuple

  淺copy:

  會在記憶體中新開闢一個空間,存放這個copy的列表,但是列表裡的內容還是沿用之前物件的記憶體地址。所以儘管l1,l2的id不同,但是內容id是相同的。

  #淺複製

  l1 = [1,2,3,[4,5,6]]

  l2 = l1.copy()

  print(id(l1))

  print(id(l2))

  l1.append(88)

  print(l1)

  print(l2)

  print("-----給列表裡的小列表新增值------")

  print(id(l1[3]))

  print(id(l2[3]))

  l2[-1].append("哈哈哈")

  print(l1)

  print(l2)

  1979862092936

  1979865206344

  [1, 2, 3, [4, 5, 6], 88]

  [1, 2, 3, [4, 5, 6]]

  -----給列表裡的小列表新增值------

  1979865206472

  1979865206472

  [1, 2, 3, [4, 5, 6, '哈哈哈'], 88]

  [1, 2, 3, [4, 5, 6, '哈哈哈']]

  #切片也是淺copy

  l1 = [1,2,3,[4,5,6]]

  l2 = l1[:]

  l1[-1].append("哈哈")

  print(l1)

  print(l2)

  [1, 2, 3, [4, 5, 6, '哈哈']]

  [1, 2, 3, [4, 5, 6, '哈哈']]

  深copy: 鄭州較好的婦科醫院

  會在記憶體中開闢新空間,將原列表以及列表裡面的可變資料型別重新建立一份,不可變的資料型別則沿用之前的

  #深copy

  import copy

  l1 = [1,2,3,[4,5,6]]

  l2 = copy.deepcopy(l1)

  print(id(l1))

  print(id(l2))

  print(id(l1[0]),id(l2[0])) # 不可變的資料型別則沿用之前的,所以id相同

  print(id(l1[-1]),id(l2[-1])) # 可變的資料型別在記憶體中重新建立一份,所以id不同

  l1[-1].append("哈哈哈")

  print(l1)

  print(l2)

  1490814040776

  1490814773896

  140707873329984 140707873329984

  1490813655816 1490814040584

  [1, 2, 3, [4, 5, 6, '哈哈哈']]

  [1, 2, 3, [4, 5, 6]]

  區別:

  淺copy:list dict:巢狀的可變的資料型別是同一個。

  深copy:list dict:巢狀的可變的資料型別不是同一個。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2666449/,如需轉載,請註明出處,否則將追究法律責任。

相關文章