3 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
假設(shè)現(xiàn)有列表為a, 復(fù)制一個(gè)新列表為b。
用 b=a 這個(gè)語句,并不會(huì)復(fù)制出一個(gè)新的列表,只是復(fù)制了列表的地址。
無論是對a還是b進(jìn)行修改,影響的都是同一個(gè)列表。
我們需要使用copy模塊中的deepcopy函數(shù):
123 | import copy a = [ 1 , 2 , 3 ] b = copy.deepcopy(a) |
這時(shí)的b才是一個(gè)列表,而不是列表的地址了。

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
提問者這么短的描述,有點(diǎn)無法看懂,那就按照通常的幾種方法來說吧:
簡單列表的拷貝
已知一個(gè)列表,求生成一個(gè)新的列表,列表元素是原列表的復(fù)制
a=[1,2]
b=a這種其實(shí)并未真正生成一個(gè)新的列表,b指向的仍然是a所指向的對象。
后果:如果對a或b的元素進(jìn)行修改,a,b的值同時(shí)發(fā)生變化。
可以使用以下方法解決:
a=[1,2]
b=a[:]這樣修改a對b沒有影響。修改b對a沒有影響。
復(fù)雜列表的拷貝:
可以使用copy模塊中的deepcopy函數(shù)。修改測試如下:
import copy
a=[1,[2]]
b=copy.deepcopy(a)

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊
import ?copy ?a? = ?[ 1 ,? 2 ,? 3 ] ?#引用 b? = ?a ?#淺拷貝 c? = ?copy.copy(a) ?#深拷貝 d? = ?copy.deepcopy(a) ?#列表解析 e? = ?[i? for ?i? in ?a] |
以上幾種都姑且可以稱為復(fù)制,但也有一些區(qū)別
添加回答
舉報(bào)