<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python中淺拷貝與深拷貝的騷操作

          共 4371字,需瀏覽 9分鐘

           ·

          2020-09-11 21:49

          ↑↑↑點(diǎn)擊上方藍(lán)字,回復(fù)資料,10個(gè)G的驚喜

          作者:繆斯mius@阿里云Python訓(xùn)練營
          博客地址:https://blog.csdn.net/m0_37759382/article/details/108489108

          【例子】淺拷貝與深拷貝中

          list1?=?[123,?456,?789,?213]
          list2?=?list1
          list3?=?list1[:]
          print(list2)??
          #?[123,?456,?789,?213]
          print(list3)??
          #?[123,?456,?789,?213]
          list1.sort()
          print(list2)??
          #?[123,?213,?456,?789]?
          **print(list3)??
          #?[123,?456,?789,?213]**
          list1?=?[[123,?456],?[789,?213]]
          list2?=?list1
          list3?=?list1[:]
          print(list2)??
          #?[[123,?456],?[789,?213]]
          print(list3)??
          #?[[123,?456],?[789,?213]]
          list1[0][0]??=?111
          print(list2)??
          #?[[111,?456],?[789,?213]]
          **print(list3)??
          #?[[111,?456],?[789,?213]]

          小朋友,你是否有很多問號?????

          為什么同樣是list3 = list1[:]
          執(zhí)行list1.sort() 操作,list3不發(fā)生變化
          執(zhí)行list1[0][0] ?= 111 操作,list3發(fā)生變化

          首先我們先了解到python的拷貝有淺拷貝深拷貝之分

          序號操作語句拷貝類型
          1Y= X直接賦值(淺拷貝)
          2Z = X [:]淺拷貝
          3P = copy.copPy(X)淺拷貝
          4K = copy.deepcopy(X)深拷貝

          接下來我們來探索一下,這些個(gè)淺拷貝深拷貝具體細(xì)節(jié)上有什么區(qū)別呢?

          看看這個(gè)case

          import?copy
          X?=?[1,3,5,['我','是','第','二','維','度'],9,11]
          Y=?X?#?直接賦值(淺拷貝)
          Z?=?X?[:]?#?淺拷貝?
          P?=?copy.copy(X)??#?淺拷貝?
          K?=?copy.deepcopy(X)#?深拷貝?

          #現(xiàn)在我們在X數(shù)組的第三個(gè)值里面添加一個(gè)'哈哈',把里面的是改為不是
          X[3].append('哈哈')
          X[3][1]?=?'不是'

          #我們打印一下結(jié)果瞧一瞧
          print("起始列表X為?:?",?X)
          print("把X列表賦值給Y為?:?",?Y)
          print("淺拷貝X列表給Z為?:?",?Z)
          print("淺拷貝X列表給P為?:?",?P)
          print("深拷貝X列表給K為?:?",?K)

          輸出結(jié)果為:

          起始列表X為?:??[1, 3, 5, ['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?9,?11]
          把X列表賦值給Y為?:??[1, 3, 5, ['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?9,?11]
          淺拷貝X列表給Z為?:??[1, 3, 5, ['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?9,?11]
          淺拷貝X列表給P為?:??[1, 3, 5, ['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?9,?11]
          深拷貝X列表給K為?:??[1, 3, 5, ['我',?'是',?'第',?'二',?'維',?'度'],?9,?11]

          是不是發(fā)現(xiàn)深拷貝淺拷貝的一點(diǎn)點(diǎn)區(qū)別啦 ^ . ^只有深拷貝不被更改**!!!**


          辣么,我現(xiàn)在想要把X列表的第三值 ['我','是','第','二','維','度'] 改為 7,把最后一個(gè)值改為101,看看這些個(gè)淺拷貝深拷貝又是怎么表現(xiàn)的......

          import?copy
          X?=?[1,3,5,['我','是','第','二','維','度'],9,11]
          Y=?X??#?直接賦值(淺拷貝)
          Z?=?X?[:]?#?淺拷貝?
          P?=?copy.copy(X)?#?淺拷貝?
          K?=?copy.deepcopy(X)#?深拷貝?

          現(xiàn)在我們修改X數(shù)組的第三個(gè)值,把最后一個(gè)值改為101

          X[3]?=?7
          X[-1]?=?101

          我們打印一下結(jié)果瞧一瞧

          print("起始列表X為?:?",?X)
          print("把X列表賦值給Y為?:?",?Y)
          print("淺拷貝X列表給Z為?:?",?Z)
          print("淺拷貝X列表給P為?:?",?P)
          print("深拷貝X列表給K為?:?",?K)

          輸出結(jié)果為:

          起始列表X為?:??[1, 3, 5, 7, 9, 101]??
          把X列表賦值給Y為?:??[1, 3, 5, 7, 9, 101]??
          淺拷貝X列表給Z為?:??[1, 3, 5, ['我',?'是',?'第',?'二',?'維',?'度'],?9,?11]??
          淺拷貝X列表給P為?:??[1, 3, 5, ['我',?'是',?'第',?'二',?'維',?'度'],?9,?11]??
          深拷貝X列表給K為?:??[1, 3, 5, ['我',?'是',?'第',?'二',?'維',?'度'],?9,?11]??

          咦!?發(fā)現(xiàn)了什么 ?~. ~有的淺拷貝背叛了同胞 !深拷貝的表現(xiàn)是一樣的


          結(jié)合上面的例子,我們發(fā)現(xiàn),對二維列表中的第一維數(shù)據(jù)做修改時(shí),使用 = 進(jìn)行賦值,對X的修改會(huì)影響Y,使用 ?[:] , copy.copy() ?, copy.deepcopy() 進(jìn)行賦值,對X的修改不會(huì)影響新的賦值。

          如果是對二維列表中的第一維數(shù)據(jù)做增加或者刪除操作呢?試一試咯

          import?copy
          X?=?[1,3,5,['我','是','第','二','維','度'],9,11]
          Y=?X??#?直接賦值(淺拷貝)
          Z?=?X?[:]#?淺拷貝?
          P?=?copy.copy(X)?#?淺拷貝?
          K?=?copy.deepcopy(X)#?深拷貝?

          #在X數(shù)組最后添加13,刪除第0個(gè)值
          X.append(13)
          X.remove(1)

          #我們打印一下結(jié)果瞧一瞧
          print("起始列表X為?:?",?X)
          print("把X列表賦值給Y為?:?",?Y)
          print("淺拷貝X列表給Z為?:?",?Z)
          print("淺拷貝X列表給P為?:?",?P)
          print("深拷貝X列表給K為?:?",?K)

          輸出結(jié)果為:

          起始列表X為?:??[3, 5, ['我',?'是',?'第',?'二',?'維',?'度'],?9,?11,?13]??
          把X列表賦值給Y為?:??[3, 5, ['我',?'是',?'第',?'二',?'維',?'度'],?9,?11,?13]??
          淺拷貝X列表給Z為?:??[1, 3, 5, ['我',?'是',?'第',?'二',?'維',?'度'],?9,?11]??
          淺拷貝X列表給P為?:??[1, 3, 5, ['我',?'是',?'第',?'二',?'維',?'度'],?9,?11]??
          深拷貝X列表給K為?:??[1, 3, 5, ['我',?'是',?'第',?'二',?'維',?'度'],?9,?11]

          我們發(fā)現(xiàn),對二維列表中的第一維數(shù)據(jù)做增加或者刪除操作
          同樣是只有使用 = 進(jìn)行賦值,對X的修改會(huì)影響Y
          于是乎,我們可以把上面的 修改 擴(kuò)充為 增刪改 (改也就包括了排序sort()操作喲)
          即對二維列表中的第一維數(shù)據(jù)做 增刪改 操作時(shí),blabla......

          你以為這就結(jié)束了嗎?

          我,第二維數(shù)據(jù)不想被修改,也不想用深拷貝,怎么辦?
          別急,append[:] 組合服用就能夠達(dá)到深拷貝deepcopy的效果啦 ===>看

          X?=?[['我','幾','維','度'],['我','是','第','二','維','度'],['我','不','說']]
          Y=?X??#?直接賦值(淺拷貝)
          Z?=?X?[:]?#?淺拷貝?
          P?=?copy.copy(X)??#?淺拷貝?
          K?=?copy.deepcopy(X)??#?深拷貝?
          TT?=?[]
          for?i?in?X:
          ????TT.append(i[:])?#?我是騷操作

          #修改第二維度信息
          X[1].append('哈哈')
          X[1][1]?=?'不是'

          #我們打印一下結(jié)果瞧一瞧
          print("起始列表X為?:?",?X)
          print("把X列表賦值給Y為?:?",?Y)
          print("淺拷貝X列表給Z為?:?",?Z)
          print("淺拷貝X列表給P為?:?",?P)
          print("深拷貝X列表給K為?:?",?K)
          print("騷操作X列表給TT為?:?",?TT)

          輸出結(jié)果為:

          起始列表X為?:??[['我',?'幾',?'維',?'度'],?['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?['我',?'不',?'說']]
          把X列表賦值給Y為?:??[['我',?'幾',?'維',?'度'],?['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?['我',?'不',?'說']]
          淺拷貝X列表給Z為?:??[['我',?'幾',?'維',?'度'],?['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?['我',?'不',?'說']]
          淺拷貝X列表給P為?:??[['我',?'幾',?'維',?'度'],?['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?['我',?'不',?'說']]
          深拷貝X列表給K為?:??**[['我',?'幾',?'維',?'度'],?['我',?'是',?'第',?'二',?'維',?'度'],?['我',?'不',?'說']]
          騷操作X列表給TT為?:??**[['我',?'幾',?'維',?'度'],?['我',?'是',?'第',?'二',?'維',?'度'],?['我',?'不',?'說']]

          掃描二維碼添加好友↓

          推薦閱讀

          (點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)

          【AI行業(yè)鄙視鏈大曝光】

          震驚!深度學(xué)習(xí)崗位已崩潰!

          Numpy核心語法和代碼整理匯總!

          數(shù)學(xué)系的概率論和我們的不太一樣。。。

          【數(shù)學(xué)史】矩陣和線性代數(shù)原來是這么來的

          老鐵,三連支持一下,好嗎?↓↓↓

          瀏覽 91
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操逼操逼操逼开房操小姐逼 | 成人高清无码视频在线免费观看 | 国产黄色三级 | 乱伦AV影视 | 欧美黑人在线 |