亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python淺拷貝和深度拷貝

系統(tǒng) 1824 0

通過代碼和結果來理解淺拷貝和深度拷貝,先來看看python中有那些常見的淺拷貝方法:

1.使用數(shù)據(jù)類型本身的構造器:

            
              l1 = [1,2,3]
l2 = list(l1)

l1 == l2 #True
l1 is l2 #False

#l2就是l1的淺拷貝,set、dict與上面的淺拷貝一致


t1 = (1,2,3)
t2 = tuple(t1)

t1 == t2 #True
t1 is t2 #True

#由于tuple不可變,tuple返回一個指向相同元組的引用,與list、set、dict不一樣


            
          

2.通過切片操作符‘:’完成淺拷貝:

            
              l1 = [1, 2, 3]
l2 = l1[:]

l1 == l2 #True

l1 is l2 #False

            
          

3.python中提供的函數(shù)copy.copy(),適用于任何數(shù)據(jù)類型:

            
              import copy
l1 = [1, 2, 3]
l2 = copy.copy(l1)

l1 == l2 #True
l1 is l2 #False
            
          

淺拷貝,是指重新分配一塊內存,創(chuàng)建一個新對象,里面的元素是原對象中子對象的引用。如果元素可變(list、set、dict),淺拷貝會帶來一些副作用。如果元素不可變(Number、String、Tuple),就沒有這些副作用。

            
              l1 = [[1, 2], (30, 40)]
l2 = list(l1)
l1.append(100)
l1[0].append(3)

l1
[[1, 2, 3], (30, 40), 100]

l2
[[1, 2, 3], (30, 40)]

l1[1] += (50, 60)
l1
[[1, 2, 3], (30, 40, 50, 60), 100]

l2
[[1, 2, 3], (30, 40)]

            
          

根據(jù)以上代碼,初始化了一個列表l1,里面的元素是一個列表和一個元組;,l2是l1的淺拷貝,l2中的元素和l1指向同一個列表和元組對象。

  1. 當l1.append(100),新增元素100。這個操作不會對l2產生任何影響,因為l2和l1作為整體是兩個不同的對象,并不共享內存地址。
  2. 執(zhí)行l(wèi)1[0].append(3),對l1的列表新增元素3。由于l2是l1的淺拷貝,l2的第一個元素和l1中的第一個元素,共同指向同一個列表,因此l2中的第一個列表也會相對應的新增元素3。l2也跟著發(fā)生改變。
  3. 操作l1[1] += (50,60),因為元祖是不可變的,這里表示對l1中的元組拼接,實際上是重新創(chuàng)建了一個新元組作為l1中的第二個元素,而l2中沒有引用新元組,l2并不受影響。

通過以上代碼,可以很清楚的看到使用淺拷貝的副作用。

總結下,如果集合中有l(wèi)ist、set、dict(可變類型)任意一個,慎重使用淺拷貝;如果集合中元素只有Number、String、Tuple(不可變元素),使用淺拷貝,就沒有副作用。

要避免這種副作用,完整的拷貝一個對象,就得使用深度拷貝。是指重新分配一塊內存,創(chuàng)建一個新對象,并且將原對象中的元素,以遞歸的方式,通過創(chuàng)建新的子對象拷貝到新對象中。因此,新對象和原對象沒有任何關聯(lián)。

python中以copy.deepcopy()來實現(xiàn)對象的深度拷貝。

            
              import copy
l1 = [[1, 2], (30, 40)]
l2 = copy.deepcopy(l1)
l1.append(100)
l1[0].append(3)

l1
[[1, 2, 3], (30, 40), 100]

l2 
[[1, 2], (30, 40)]
            
          

?


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久草在线免费资源 | 久久精品视频8 | sihu永久在线播放地址 | 一级毛片特级毛片黄毛片 | 日韩一二区 | 亚洲欧美成人中文在线网站 | 美女被爆羞羞视频网站视频 | 欧美精品久久 | 国产中文 | 国产成人在线播放 | 青青青国产成人久久111网站 | 国产日日操 | 国产精品亚欧美一区二区三区 | 天天做天天玩天天爽天天 | 97超精品视频在线观看 | 又黑又粗又硬欧美视频在线观看 | 91成人免费观看网站 | 欧美一级视频精品观看 | 日本不卡在线观看 | 国内精品视频成人一区二区 | 福利在线免费视频 | 性欧美日韩 | 综合亚洲精品一区二区三区 | 99久久这里只精品国产免费 | 久久久久一区二区三区 | 中文字幕一区二区三区永久 | 国产成人精品永久免费视频 | 99这里 | 在线观看福利影院 | 最近中文字幕在线视频1 | 四虎永久免费观看 | 波多野结衣中文字幕一区二区三区 | 国产精品免费视频能看 | 男女免费在线视频 | 亚洲精品欧美精品日韩精品 | 国产性一交一乱一伦一色一情 | 日韩欧美二区 | 99精品国产自产在线观看 | 久久中文字幕久久久久 | 久草国产精品 | 久久精品久久精品国产大片 |