熟悉python的朋友都知道,與其說在python中給變數賦值,倒不如說是給值貼標籤。
為什麼這麼說,因為當我使用諸如 a = b 這種操作時,python並沒有為把b的複製給a,而是把a這個標籤貼在了b標籤貼在的變數上。
那麼當我有乙個列表,我想修改它並產生乙個副本但是卻不改變原來的列表的時候,就必須去複製列表。
我舉個反例:
a = ['0', '1' ,'2', '3']
b = a
b.remove('2')
當我執行這段操作之後,猜猜看,a和b他們的值還一樣嗎?
結果是,我修改了b,a也發生了改變
所以,初學者一定要注意, 『=』並不靠譜
第一種:切片複製的方法(適用於簡單的列表,即單層的列表)
a = ['0', '1' ,'2', '3']
b = a[:]
b.remove('2')
我們來看一下結果
好的,這次我們的a沒有跟著b跑偏
第二種:deepcopy的方法(適用於複雜的列表)
可是,昨天我在使用乙個複雜的列表的時候這種方式卻出現了問題,而且我找了好久都沒有發現問題在哪兒
最後終於發現,因為我的列表中還巢狀有列表,一共四層,所以用簡單的切片還是會出現問題,我舉個例子:
a = [ ['11', '22', '33'], '1', '2', '3']
b = a[:]
b[0].remove('22')
結果是這樣的:
什麼?!!!你在逗我呢,怎麼a又被b拐跑了?
好吧,估計大家想一下就明白了,原來當我修改了裡層的列表/字典/元組(這些都類似)的時候,切片複製就不好用了,那我該怎麼辦呢?
很簡單,只需要匯入copy這個模組,使用他的deepcopy方法就可以了
import copy
a = [ ['11', '22', '33'], '1', '2', '3']
b = copy.deepcopy(a)
b[0].remove('22')
現在b就改變不了a了
這個問題我被足足纏了兩個晚上,希望能幫到大家。
python 列表複製
我們經常需要根據已有列表來建立全新的列表,下面來介紹列表複製的工作原理。1 原理 要複製列表,首先需要建立乙個包含整個列表的切片,方法是同時省略起始和終止索引 即讓python建立乙個始於第乙個元素,終止於最後乙個元素的切片,便可複製整個切片。例 將 myfoods 複製給 friendfoods ...
python列表複製
我想實現乙個列表複製的操作,於是我就寫下了下面的 list 2 list 1 print list 2 print list 1 結果卻是這個樣子滴 banana berry banana berry 於是乎,我發現了乙個問題,list 2 list 1這樣寫並不是真正的列表複製,而是list 2 ...
python 複製列表內容 Python 複製列表
python 複製列表 定義乙個列表,並將該列表元素複製到另外乙個列表上。def clone test li1 li copy li1 return li copy li1 4,8,2,10,15,18 li2 clone test li1 print 原始列表 li1 print 複製後列表 li...