Python中列表的深淺拷貝

風掠丶幽蘭發表於2018-11-21

copy_lst = [

  (`py物件三要素`,),

  (`== 比較運算子`,),

  (`is 身份運算子`,),

  (`小資料池`,),

  (`列表的淺拷貝`,),

  (`列表的深拷貝`,),

]

 

py物件三要素

  id

  type

  value

== 比較運算子

  通過value進行判斷

    >>>a = 257

    >>>b = 257

    >>> a == b

    True

is 身份運算子

  通過id進行判斷

    >>>a = 257

    >>>b = 257

    >>>id(a) == id(b)

    False

    >>>a is b

    False

小資料池

  程式碼塊的快取機制

列表的淺拷貝

  第一層建立新的記憶體地址

  從第二層開始,指向同一個記憶體地址

    >>>lst = [1, 2, [3, 4]]

    >>>copy_lst = lst.copy()

    >>>lst is copy_lst

    False

    >>>lst[0] = 5

    >>>lst[0] is copy_lst[0]

    False

    >>>lst[2][1] = 6

    >>>lst[2] is copy_lst[2]

    True

列表的深拷貝

  完全獨立

  改變列表任意一個元素(無論多少層),另一個列表都不會改變

    >>>from copy import deepcopy

    >>>lst = [1, 2, [3, 4]]

    >>>deepcopy_lst = deepcopy(lst)

    >>>lst is deepcopy_lst

    False

    >>>lst[0] = 6

    >>>lst[0] is deepcopy_lst[0]

    False

    >>>lst[2][1] = 5

    >>>lst[2] is deepcopy_lst[2]

    False

  

  

  

  

相關文章