最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python列表的深復制和淺復制示例詳解

 更新時間:2021年02月12日 10:34:33   作者:Kepler11  
這篇文章主要給大家介紹了關于Python列表的深復制和淺復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、深復制與淺復制

列表是Python中自帶的一種數(shù)據(jù)結構,在使用列表時,拷貝操作不可避免,下面簡單討論一下列表的深復制(拷貝)與淺復制

首先看代碼:

l1 = [5, 4, 3, 2, 1]
# 用兩種方法實現(xiàn)對列表l1的拷貝
l2 = l1
l3 = l1[:]
print(l1) # [5, 4, 3, 2, 1]
print(l2) # [5, 4, 3, 2, 1]
print(l3) # [5, 4, 3, 2, 1]
 
#修改l1
l1[0] = 9
print(l1) # [9, 4, 3, 2, 1]
print(l2) # [9, 4, 3, 2, 1]
print(l3) # [5, 4, 3, 2, 1]

我們發(fā)現(xiàn)修改l1的第一個元素后,l2的第一個元素跟著改變,而l3并沒有發(fā)生變化。Python內置函數(shù)id()可以返回元素的地址,那么我們使用這個函數(shù)來看一下三個列表的地址:

print(id(l1)) # 2927957162504
print(id(l2)) # 2927957162504
print(id(l3)) # 2927923243528

從結果來看,l1和l2地址是一樣的,也就是說l1和l2指向的是同一塊內存區(qū)域,顯然,通過 l2 = l1 操作,l1和l2都成了指向同一塊內存地址的“指針”,也就是說這個操作是為l1取了一個別名,也可以說l2是l1的一個引用。用一張圖來解釋:

那么修改l1也就是在修改l2:

接下來看一下創(chuàng)建l3的過程,l3 = l1[:] ,這是將l1進行切片,并將切片后的列表拷貝到l3所指向的內存區(qū)域,同樣看圖:

也就是說l1和l3指向不同的內存區(qū)域,那么修改l1并不會影響到l3:

通俗的來講,像l2這種,拷貝出來的對象和原對象的地址相同,為淺復制,像l3這種,分配新的內存空間并拷貝原始內容的,拷貝出來的對象和原對象的地址不同,為深復制。

二、復制列表內元素的淺復制

在復制列表中的所有元素的時候,進行淺復制

看一個比較有意思的東西,看代碼:

l1 = [1,2,3,[1,3]]
l2 = l1[:]
l1[3][1] = 9
print(l1) # [1, 2, 3, [1, 9]]
print(l2) # [1, 2, 3, [1, 9]]

按照前面的理解,修改l1某個元素后,l2應該不會發(fā)生改變,可結果卻與我們預想的結果大相徑庭,于是,我們不得不思考一下l2深復制到底復制了什么東西。實際上列表其實可以理解為一個“指針”,l1[3]是一個列表元素,l2[3]也是一個列表元素,執(zhí)行以下代碼:

print(id(l2[3])) # 2014816956232
print(id(l1[3])) # 2014816956232

我們發(fā)現(xiàn)l1[3]和l2[3]指向的地址是一樣的,也就是說在執(zhí)行 l2 = l1[:] 的時候,將一個地址拷貝了,所以修改l1[3]相當于修改l2[3],所以才會出現(xiàn)上述結果,這更加說明了列表其實就是一個指向一片內存區(qū)域的“指針”。那么我們是不是可以說列表l2深復制l1,但是對列表中每個元素進行復制時進行的是淺復制呢?答案顯而易見。

修改l1[3]中的元素:

三、copy()和deepcopy()

copy模塊可以幫助我們實現(xiàn)對象的復制操作

列舉一下其他的拷貝列表的方式:

l4 = l1 * 1
print(id(l4)) # 2927957916296
l5 = list(l1)
print(id(l5)) # 2927957767816
import copy
l6 = copy.copy(l1)
print(id(l6)) # 2927956854024
l7 = copy.deepcopy(l1)
print(id(l7)) # 2927958503368

我們可以看到,這幾種拷貝方式所得到的的新對象與原對象的地址都不相同了,并沒有按照字面意思(copy進行淺復制,deepcopy進行深復制),那么copy()和deepcopy()究竟有什么區(qū)別呢,繼續(xù)看代碼:

list1 = [1,2,3,[1,3]]
list2 = list1[:]
list3 = copy.copy(list1)
list4 = copy.deepcopy(list1)
list1[3][0] = 9
print(list1) # [1, 2, 3, [9, 3]]
print(list2) # [1, 2, 3, [9, 3]]
print(list3) # [1, 2, 3, [9, 3]]
print(list4) # [1, 2, 3, [1, 3]]
print(id(list1[3])) # 2927923172616
print(id(list2[3])) # 2927923172616
print(id(list3[3])) # 2927923172616
print(id(list4[3])) # 2927967190728

可以發(fā)現(xiàn)copy()和前面提到的用 [:] 進行拷貝沒有本質上的區(qū)別,對列表中的每個元素進行復制時進行的是淺拷貝,而deepcopy()在復制列表中的每個元素的時候,進行的是深拷貝。

總結

到此這篇關于Python列表的深復制和淺復制的文章就介紹到這了,更多相關Python列表深復制和淺復制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python字符串基礎操作詳解

    python字符串基礎操作詳解

    這篇文章主要為大家詳細介紹了python字符串基礎操作,,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 詳解pandas df.iloc[]的典型用法

    詳解pandas df.iloc[]的典型用法

    本文主要介紹了詳解pandas df.iloc[]的典型用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Python configparser模塊常用方法解析

    Python configparser模塊常用方法解析

    這篇文章主要介紹了Python configparser模塊常用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • pytorch搭建模型的五大層次級別解讀(由淺入深)

    pytorch搭建模型的五大層次級別解讀(由淺入深)

    這篇文章主要介紹了pytorch搭建模型的五大層次級別(由淺入深),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 教你從零開始實現(xiàn)貪吃蛇Python小游戲

    教你從零開始實現(xiàn)貪吃蛇Python小游戲

    這篇文章主要教你從零開始實現(xiàn)貪吃蛇Python小游戲,沒有使用pygame庫,附帶源碼和注釋,非常有意思,需要的朋友可以參考下
    2023-03-03
  • OpenCV黑帽運算(BLACKHAT)的使用

    OpenCV黑帽運算(BLACKHAT)的使用

    本文主要介紹了OpenCV黑帽運算(BLACKHAT)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Python+Jmeter實現(xiàn)自動化性能壓測的流程步驟

    Python+Jmeter實現(xiàn)自動化性能壓測的流程步驟

    性能測試是一個全棧工程師/架構師必會的技能之一,只有學會性能測試,才能根據(jù)得到的測試報告進行分析,找到系統(tǒng)性能的瓶頸所在,而這也是優(yōu)化架構設計中重要的依據(jù),本文給大家介紹了Python+Jmeter實現(xiàn)自動化性能壓測的流程步驟,需要的朋友可以參考下
    2024-05-05
  • Python實現(xiàn)的文本簡單可逆加密算法示例

    Python實現(xiàn)的文本簡單可逆加密算法示例

    這篇文章主要介紹了Python實現(xiàn)的文本簡單可逆加密算法,結合完整實例形式分析了Python自定義加密與解密算法具體實現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-05-05
  • python3 循環(huán)讀取excel文件并寫入json操作

    python3 循環(huán)讀取excel文件并寫入json操作

    這篇文章主要介紹了python3 循環(huán)讀取excel文件并寫入json操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Windows 下python3.8環(huán)境安裝教程圖文詳解

    Windows 下python3.8環(huán)境安裝教程圖文詳解

    這篇文章主要介紹了Windows 下python3.8環(huán)境安裝教程圖文詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03

最新評論

济阳县| 嘉黎县| 德化县| 惠安县| 神池县| 上林县| 凤城市| 永兴县| 顺昌县| 太康县| 宜兰市| 赤水市| 墨脱县| 宁强县| 财经| 阿勒泰市| 海门市| 睢宁县| 巴中市| 曲水县| 黄龙县| 扶沟县| 新郑市| 建湖县| 邢台市| 岳阳县| 铜山县| 三江| 贡山| 临西县| 水富县| 泰州市| 海南省| 本溪| 仲巴县| 新化县| 甘肃省| 太和县| 察雅县| 乌审旗| 泰州市|