Python中使用copy模塊實(shí)現(xiàn)列表(list)拷貝
引用是指保存的值為對(duì)象的地址。在 Python 語言中,一個(gè)變量保存的值除了基本類型保存的是值外,其它都是引用,因此對(duì)于它們的使用就需要小心一些。下面舉個(gè)例子:
問題描述:已知一個(gè)列表,求生成一個(gè)新的列表,列表元素是原列表的復(fù)制
a=[1,2]
b=a
這種做法其實(shí)并未真正生成一個(gè)新的列表,b指向的仍然是a所指向的對(duì)象。這樣,如果對(duì)a或b的元素進(jìn)行修改,a,b的值同時(shí)發(fā)生變化。
解決的方法為:
a=[1,2]
b=a[:]
這樣修改a對(duì)b沒有影響。修改b對(duì)a沒有影響。
但 這種方法只適用于簡(jiǎn)單列表,也就是列表中的元素都是基本類型,如果列表元素還存在列表的話,這種方法就不適用了。原因就是,象a[:]這種處理,只是將列 表元素的值生成一個(gè)新的列表,如果列表元素也是一個(gè)列表,如:a=[1,[2]],那么這種復(fù)制對(duì)于元素[2]的處理只是復(fù)制[2]的引用,而并未生成 [2]的一個(gè)新的列表復(fù)制。為了證明這一點(diǎn),測(cè)試步驟如下:
>>> a=[1,[2]]
>>> b=a[:]
>>> b
[1, [2]]
>>> a[1].append(3)
>>> a
[1, [2, 3]]
>>> b
[1, [2, 3]]
可見,對(duì)a的修改影響到了b。如果解決這一問題,可以使用copy模塊中的deepcopy函數(shù)。修改測(cè)試如下:
>>> 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í)不想影響原來的列表。
相關(guān)文章
python使用sorted函數(shù)對(duì)列表進(jìn)行排序的方法
這篇文章主要介紹了python使用sorted函數(shù)對(duì)列表進(jìn)行排序的方法,涉及Python使用sorted函數(shù)的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04python 字符串的駐留機(jī)制及優(yōu)缺點(diǎn)
字符串駐留是一種僅保存一份相同且不可變字符串的方法。這篇文章主要介紹了python 字符串的駐留機(jī)制,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06選擇Python寫網(wǎng)絡(luò)爬蟲的優(yōu)勢(shì)和理由
在本篇文章里小編給各位整理了一篇關(guān)于選擇Python寫網(wǎng)絡(luò)爬蟲的優(yōu)勢(shì)和理由以及相關(guān)代碼實(shí)例,有興趣的朋友們閱讀下吧。2019-07-07Pytest單元測(cè)試框架如何實(shí)現(xiàn)參數(shù)化
這篇文章主要介紹了Pytest單元測(cè)試框架如何實(shí)現(xiàn)參數(shù)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09使用sklearn之LabelEncoder將Label標(biāo)準(zhǔn)化的方法
今天小編就為大家分享一篇使用sklearn之LabelEncoder將Label標(biāo)準(zhǔn)化的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07Python函數(shù)的參數(shù)類型和使用技巧詳解
這篇文章主要介紹了Python函數(shù)的參數(shù)類型和使用技巧詳解,函數(shù)指通過專門的代碼組織,用來實(shí)現(xiàn)特定功能的代碼段,具有相對(duì)的獨(dú)立性,可以被其他代碼重復(fù)調(diào)用,需要的朋友可以參考下2023-08-08Python lambda和Python def區(qū)別分析
Python支持一種有趣的語法,它允許你快速定義單行的最小函數(shù)。這些叫做lambda的函數(shù),是從Lisp借用來的,可以用在任何需要函數(shù)的地方2014-11-11Python 實(shí)現(xiàn)打印單詞的菱形字符圖案
這篇文章主要介紹了Python 實(shí)現(xiàn)打印單詞的菱形字符圖案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04