目錄
- 一、前言
- 二、直接賦值
- 三、用切片賦值
- 四、copy()復制實現賦值
- 五、deepcopy()復制實現賦值
- 六、copy()和deepcopy()的區別
一、前言
Python中列表的復制分為幾種情況:
下面通過實例分析一下這幾種情況的區別。
二、直接賦值
a = [11, 22, 33]
b = a
print(id(a), id(b))
b[0]=1
print(a,b)
輸出結果為如下所示,發現內存地址沒有發生變化,b只是a的引用,通過b更改列表的值時,a同時做修改。

三、用切片賦值
a = [11, 22, 33]
b = a[:]
print(id(a), id(b))
b[0]=1
print(a,b)
輸出結果為如下所示,發現內存地址發生了變化,通過b更改列表的值時,對a沒有任何的影響。

四、copy()復制實現賦值
a = [11, 22, 33]
b = copy.copy(a)
print(id(a), id(b))
b[0]=1
print(a,b)
輸出結果為如下所示,
發現內存地址發生了變化,通過b更改列表的值時,對a沒有任何的影響。說明copy()復制的方式和切片的方式功能相同。

五、deepcopy()復制實現賦值
a = [11, 22, 33]
b = copy.deepcopy(a)
print(id(a), id(b))
b[0]=1
print(a,b)
輸出結果為如下所示,發現在該實例中,deepcopy()和copy()的方式沒有任何區別。

那么淺復制和深復制有什么區別呢?繼續看下面的實例測試。
六、copy()和deepcopy()的區別
6.1 copy()
a = [11, 22, 33, [1,2]]
b = copy.copy(a)
print(id(a), id(b))
b[3][0]=11
print(a,b)
運行結果:

6.2 deepcopy()
a = [11, 22, 33, [1,2]]
b = copy.deepcopy(a)
print(id(a), id(b))
b[3][0]=11
print(a,b)
運行結果:

通過上面的測試,發現當列表a中的元素包含子列表時:
copy()方法為淺復制,沒有復制子對象,當原始數據改變,子對象會改變;而deepcopy()方法包含對象里面的子對象的復制,當原始對象改變,不會造成深復制里任何子元素的改變。
到此這篇關于Python基礎詳解之列表復制的文章就介紹到這了,更多相關python列表復制內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python中必會的四大高級數據類型(字符,元組,列表,字典)
- Python列表刪除重復元素與圖像相似度判斷及刪除實例代碼
- Python 統計列表中重復元素的個數并返回其索引值的實現方法
- Python 把兩層列表展開平鋪成一層(5種實現方式)
- 淺談Python列表嵌套字典轉化的問題
- Python隨機函數random隨機獲取數字、字符串、列表等使用詳解
- Python列表排序方法reverse、sort、sorted詳解
- Python3 列表list合并的4種方法
- python獲取指定時間段內特定規律的日期列表
- python實現合并兩個有序列表的示例代碼
- python求列表對應元素的乘積和的實現
- Python統計列表元素出現次數的方法示例
- python 合并列表的八種方法
- python 列表元素左右循環移動 的多種解決方案
- Python列表排序 list.sort方法和內置函數sorted用法
- 淺談Python基礎之列表那些事兒