日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python中使用copy模塊實(shí)現(xiàn)列表(list)拷貝

系統(tǒng) 1791 0

引用是指保存的值為對(duì)象的地址。在 Python 語(yǔ)言中,一個(gè)變量保存的值除了基本類(lèi)型保存的是值外,其它都是引用,因此對(duì)于它們的使用就需要小心一些。下面舉個(gè)例子:

問(wèn)題描述:已知一個(gè)列表,求生成一個(gè)新的列表,列表元素是原列表的復(fù)制

復(fù)制代碼 代碼如下:

a=[1,2]
b=a

這種做法其實(shí)并未真正生成一個(gè)新的列表,b指向的仍然是a所指向的對(duì)象。這樣,如果對(duì)a或b的元素進(jìn)行修改,a,b的值同時(shí)發(fā)生變化。

解決的方法為:

復(fù)制代碼 代碼如下:

a=[1,2]
b=a[:]

這樣修改a對(duì)b沒(méi)有影響。修改b對(duì)a沒(méi)有影響。

但 這種方法只適用于簡(jiǎn)單列表,也就是列表中的元素都是基本類(lèi)型,如果列表元素還存在列表的話(huà),這種方法就不適用了。原因就是,象a[:]這種處理,只是將列 表元素的值生成一個(gè)新的列表,如果列表元素也是一個(gè)列表,如:a=[1,[2]],那么這種復(fù)制對(duì)于元素[2]的處理只是復(fù)制[2]的引用,而并未生成 [2]的一個(gè)新的列表復(fù)制。為了證明這一點(diǎn),測(cè)試步驟如下:

復(fù)制代碼 代碼如下:

>>> a=[1,[2]]
>>> b=a[:]
>>> b
[1, [2]]
>>> a[1].append(3)
>>> a
[1, [2, 3]]
>>> b
[1, [2, 3]]

可見(jiàn),對(duì)a的修改影響到了b。如果解決這一問(wèn)題,可以使用copy模塊中的deepcopy函數(shù)。修改測(cè)試如下:
復(fù)制代碼 代碼如下:

>>> import copy
>>> a=[1,[2]]
>>> b=copy.deepcopy(a)
>>> b
[1, [2]]
>>> a[1].append(3)
>>> a
[1, [2, 3]]
>>> b
[1, [2]]

有時(shí)候知道這一點(diǎn)是非常重要的,因?yàn)榭赡苣愕拇_需要一個(gè)新的列表,并且對(duì)這個(gè)新的列表進(jìn)行操作,同時(shí)不想影響原來(lái)的列表。


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 增城市| 炎陵县| 广西| 盐山县| 龙山县| 华亭县| 安新县| 宜城市| 井冈山市| 汕尾市| 横峰县| 昌黎县| 岢岚县| 乌鲁木齐县| 连山| 宝应县| 都兰县| 东乡县| 廊坊市| 马山县| 客服| 纳雍县| 二连浩特市| 石狮市| 永宁县| 宜兰市| 肇州县| 滕州市| 缙云县| 德州市| 广汉市| 平利县| 渭南市| 阿图什市| 苗栗市| 万宁市| 建阳市| 上杭县| 留坝县| 新邵县| 抚顺县|