<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中淺拷貝與深拷貝的騷操作

          共 4327字,需瀏覽 9分鐘

           ·

          2020-09-18 05:38



          作者:繆斯mius

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

          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]]

          小朋友,你是否有很多問(wèn)號(hào)?????

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

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

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

          接下來(lái)我們來(lái)探索一下,這些個(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)在我們?cè)赬數(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),對(duì)二維列表中的第一維數(shù)據(jù)做修改時(shí),使用 = 進(jìn)行賦值,對(duì)X的修改會(huì)影響Y,使用 ?[:] , copy.copy() ?, copy.deepcopy() 進(jìn)行賦值,對(duì)X的修改不會(huì)影響新的賦值。

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

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

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

          X?=?[['我','幾','維','度'],['我','是','第','二','維','度'],['我','不','說(shuō)']]
          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為?:??[['我',?'幾',?'維',?'度'],?['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?['我',?'不',?'說(shuō)']]
          把X列表賦值給Y為?:??[['我',?'幾',?'維',?'度'],?['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?['我',?'不',?'說(shuō)']]
          淺拷貝X列表給Z為?:??[['我',?'幾',?'維',?'度'],?['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?['我',?'不',?'說(shuō)']]
          淺拷貝X列表給P為?:??[['我',?'幾',?'維',?'度'],?['我',?'不是',?'第',?'二',?'維',?'度',?'哈哈'],?['我',?'不',?'說(shuō)']]
          深拷貝X列表給K為?:??**[['我',?'幾',?'維',?'度'],?['我',?'是',?'第',?'二',?'維',?'度'],?['我',?'不',?'說(shuō)']]
          騷操作X列表給TT為?:??**[['我',?'幾',?'維',?'度'],?['我',?'是',?'第',?'二',?'維',?'度'],?['我',?'不',?'說(shuō)']]


          推薦閱讀

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

          剛剛用華為鴻蒙跑了個(gè)“hello world”!跑通后,我特么開(kāi)始懷疑人生....

          十大最受數(shù)據(jù)科學(xué)歡迎的Python庫(kù)

          實(shí)踐應(yīng)用|pandas+PyQt5制作數(shù)據(jù)(分組)透視處理工具


          轉(zhuǎn)了嗎
          ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??
          ? ? ? ? ? ? ? ? ? ? ? ? ? ?贊了嗎
          在看嗎
          瀏覽 66
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  免费一级特黄特色黄录像 | 青青草视频激情 | 亚洲欧洲免费在线 | 18禁成人免费网站 | AV网站免费在线观看 |