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

          共 4369字,需瀏覽 9分鐘

           ·

          2020-11-10 18:56

          作者:繆斯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)深拷貝

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

          看看這個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ù)組的第三個值里面添加一個'哈哈',把里面的是改為不是
          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)深拷貝淺拷貝的一點點區(qū)別啦 ^ . ^只有深拷貝不被更改**?。。?*


          辣么,我現(xiàn)在想要把X列表的第三值 ['我','是','第','二','維','度'] 改為 7,把最后一個值改為101,看看這些個淺拷貝深拷貝又是怎么表現(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ù)組的第三個值,把最后一個值改為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]??

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


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

          如果是對二維列表中的第一維數(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個值
          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的修改會影響Y
          于是乎,我們可以把上面的 修改 擴(kuò)充為 增刪改 (改也就包括了排序sort()操作喲)
          即對二維列表中的第一維數(shù)據(jù)做 增刪改 操作時,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為?:??**[['我',?'幾',?'維',?'度'],?['我',?'是',?'第',?'二',?'維',?'度'],?['我',?'不',?'說']]


          由于微信平臺算法改版,公號內(nèi)容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強(qiáng)烈建議星標(biāo)我們和給我們多點點【在看】。星標(biāo)具體步驟為:


          (1)點擊頁面最上方“小詹學(xué)Python”,進(jìn)入公眾號主頁。


          (2)點擊右上角的小點點,在彈出頁面點擊“設(shè)為星標(biāo)”,就可以啦。


          感謝支持,比心。

          瀏覽 36
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  69精品无码成人久久久久久 | 综合自拍| 9.1成长蘑菇视频 | 国产精品国产三级在线专区 | 水蜜桃视频在线观看免费 |