python列表的複製

2021-07-24 09:30:04 字數 1483 閱讀 2599

熟悉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...