国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2019-11-25 17:44:56
字體:
供稿:網(wǎng)友

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

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

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

a=[1,2]
b=a

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

解決的方法為:

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

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

這樣修改a對b沒有影響。修改b對a沒有影響。

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

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

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

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

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

有時候知道這一點是非常重要的,因為可能你的確需要一個新的列表,并且對這個新的列表進(jìn)行操作,同時不想影響原來的列表。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 酒泉市| 邹平县| 锡林浩特市| 屯留县| 宁夏| 南城县| 会昌县| 利辛县| 临沭县| 玛曲县| 乌鲁木齐市| 孝感市| 吐鲁番市| 珠海市| 太仆寺旗| 阿尔山市| 且末县| 凤冈县| 监利县| 沛县| 扶风县| 邢台县| 定襄县| 亳州市| 将乐县| 宝山区| 溧水县| 延寿县| 启东市| 肇州县| 永吉县| 大丰市| 孟连| 石棉县| 宁陵县| 平遥县| 桐城市| 周口市| 德江县| 中江县| 江津市|