chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡述Python中深淺拷貝(copy)

馬哥Linux運維 ? 來源:CSDN ? 作者:南枝向暖北枝寒 ? 2021-07-29 16:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在工作中,常涉及到數(shù)據(jù)的傳遞,在數(shù)據(jù)傳遞使用過程中,可能會發(fā)生數(shù)據(jù)被修改的問題。為了防止數(shù)據(jù)被修改,就需要在傳遞一個副本,即使副本被修改,也不會影響原數(shù)據(jù)的使用。為了生成這個副本,就產(chǎn)生了拷貝。今天就說一下Python中的深淺拷貝問題。

一、深淺copy

賦值運算

l1 = [1, 2, 3, [22, 33]]l2 = l1l1.append(666)print(l1) # [1, 2, 3, [22, 33], 666]print(l2) # [1, 2, 3, [22, 33], 666]

圖解:

913a8f9c-edff-11eb-a97a-12bb97331649.png

注意:l2 = l1是一個指向,是賦值,和深淺copy無關(guān)。

淺copy

其實列表是一個一個的槽位,每個槽位存儲的是該對象的內(nèi)存地址

#例1. 給大列表添加元素l1 = [1, 2, 3, [22, 33]]l2 = l1.copy()# 或者下面這種方式,也是淺copy# import copy# l2 = copy.copy(l1)l1.append(666)

print(l1) # [1, 2, 3, [22, 33], 666]print(l2) # [1, 2, 3, [22, 33]]

#例2. 給小列表添加元素l1 = [1, 2, 3, [22, 33]]l2 = l1.copy()l1[-1].append(666)

print(l1) # [1, 2, 3, [22, 33, 666]]print(l2) # [1, 2, 3, [22, 33, 666]]、

例3. 將l1列表中第一個元素改為6l1 = [1, 2, 3, [22, 33]]l2 = l1.copy()l1[0] = 6

print(l1) # [6, 2, 3, [22, 33]]print(l2) # [1, 2, 3, [22, 33]]

小結(jié):

淺copy:會在內(nèi)存中新開辟一個空間,存放這個copy的列表,但是列表里面的內(nèi)容還是沿用之前對象的內(nèi)存地址。

深copy

import copyl1 = [1, 2, 3, [22, 33]]l2 = copy.deepcopy(l1)l1.append(666)print(l1) # [1, 2, 3, [22, 33], 666]print(l2) # [1, 2, 3, [22, 33]]

但是python對深copy做了一個優(yōu)化,將可變的數(shù)據(jù)類型在內(nèi)存中重新創(chuàng)建一份,而不可變的數(shù)據(jù)類型則沿用之前的,所以內(nèi)存中是下面這樣的:

91dcdfcc-edff-11eb-a97a-12bb97331649.png

小結(jié):

深copy:會在內(nèi)存中開辟新空間,將原列表以及列表里面的可變數(shù)據(jù)類型重新創(chuàng)建一份,不可變數(shù)據(jù)類型則沿用之前的。

為什么Python默認(rèn)的拷貝方式是淺拷貝?

時間角度:淺拷貝花費時間更少。

空間角度:淺拷貝花費內(nèi)存更少。

效率角度:淺拷貝只拷貝頂層數(shù)據(jù),一般情況下比深拷貝效率高。

總結(jié):

不可變對象在賦值時會開辟新空間。

可變對象在賦值時,修改一個的值,另一個也會發(fā)生改變。

深、淺拷貝對不可變對象拷貝時,不開辟新空間,相當(dāng)于賦值操作。

淺拷貝在拷貝時,只拷貝第一層中的引用,如果元素是可變對象,并且被修改,那么拷貝的對象也會發(fā)生變化。

深拷貝在拷貝時,會逐層進行拷貝,直到所有的引用都是不可變對象為止。

Python 有多種方式實現(xiàn)淺拷貝,copy模塊的copy 函數(shù) ,對象的 copy 函數(shù) ,工廠方法,切片等。

大多數(shù)情況下,編寫程序時,都是使用淺拷貝,除非有特定的需求。

淺拷貝的優(yōu)點:拷貝速度快,占用空間少,拷貝效率高。

原文鏈接:https://blog.csdn.net/mall_lucy/article/details/104531218

文章轉(zhuǎn)載:CSDN

(版權(quán)歸原作者所有,侵刪)

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4848

    瀏覽量

    88940

原文標(biāo)題:圖解 Python 中深淺拷貝(copy)

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    使用串口dma環(huán)形接收+空閑中斷,觸發(fā)空閑中斷后進入任務(wù)拷貝數(shù)據(jù)發(fā)現(xiàn)拷貝的數(shù)據(jù)全為0,怎么處理?

    求助,我使用串口dma環(huán)形接收+空閑中斷,默認(rèn)應(yīng)該開了緩存,在觸發(fā)空閑中斷后進入任務(wù)拷貝數(shù)據(jù)發(fā)現(xiàn)拷貝的數(shù)據(jù)全為0,但是我掛上調(diào)試之后在拷貝之前只要打上斷點斷一次執(zhí)行之后再執(zhí)行就正常了
    發(fā)表于 03-27 06:17

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間與用戶空間的數(shù)據(jù)拷貝之獲取內(nèi)核空間數(shù)據(jù)

    編譯成.ko并拷貝到開發(fā)板。 編寫測試應(yīng)用源碼copy_to_user.c #include #include #include #include #include #include
    發(fā)表于 03-21 14:00

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間與用戶空間的數(shù)據(jù)拷貝之?dāng)?shù)據(jù)拷貝介紹

    空間之間進行數(shù)據(jù)傳輸時,需要進行數(shù)據(jù)拷貝操作。Linux內(nèi)核提供了幾種方法來實現(xiàn)內(nèi)核空間與用戶空間之間的數(shù)據(jù)拷貝copy_to_user()和copy_from_user()這兩個函
    發(fā)表于 03-20 11:50

    飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間與用戶空間的數(shù)據(jù)拷貝之獲取內(nèi)核空間數(shù)據(jù)

    /environment-setup-cortexa7hf-neon-poky-linux-gnueabi elf@ubuntu:~/work/test/03_內(nèi)核空間與用戶空間的數(shù)據(jù)拷貝/copy_to_user$ make將驅(qū)動模塊編譯成.ko并
    發(fā)表于 03-20 11:48

    Python在嵌入式系統(tǒng)的應(yīng)用場景

    你想把你的職業(yè)生涯提升到一個新的水平?Python在嵌入式系統(tǒng)中正在成為一股不可缺少的新力量。盡管傳統(tǒng)上嵌入式開發(fā)更多地依賴于C和C++語言,Python的優(yōu)勢在于其簡潔的語法、豐富的庫和快速的開發(fā)周期,這使得它在某些嵌入式場景中非常有用,以下是
    的頭像 發(fā)表于 03-19 14:10 ?1005次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核空間與用戶空間的數(shù)據(jù)拷貝之?dāng)?shù)據(jù)拷貝介紹

    在Linux系統(tǒng),內(nèi)核空間和用戶空間是兩個獨立的地址空間,它們有不同的訪問權(quán)限和內(nèi)存保護機制。在內(nèi)核空間和用戶空間之間進行數(shù)據(jù)傳輸時,需要進行數(shù)據(jù)拷貝操作。Linux內(nèi)核提供了幾種方法來實現(xiàn)內(nèi)核
    發(fā)表于 03-19 08:55

    如何將python文件導(dǎo)入到ROS系統(tǒng)

    本文通過使用myCobot機械臂進行QR碼視覺追蹤的實踐案例分析,介紹如何將 python 文件導(dǎo)入到 ROS 系統(tǒng)。
    的頭像 發(fā)表于 02-11 11:08 ?1055次閱讀
    如何將<b class='flag-5'>python</b>文件導(dǎo)入到ROS系統(tǒng)<b class='flag-5'>中</b>

    四頻拷貝遙控器走俏海外

    常有同事反饋和客戶溝通時,需要了解客戶的遙控器頻率才能推薦合適的拷貝遙控器,這就需要客戶拆開遙控器查看才能確定,而有些扣位結(jié)合的原裝遙控器,強行拆開會導(dǎo)致遙控器損壞,對于客戶來講就是得不償失的事了
    的頭像 發(fā)表于 02-08 15:34 ?749次閱讀
    四頻<b class='flag-5'>拷貝</b>遙控器走俏海外

    FB08 1對7 U盤拷貝格式化機——高效數(shù)據(jù)復(fù)制工具

    FB08 1對7 U盤拷貝格式化機,采用臺灣捷美原廠工藝,具備25MB/s的高速拷貝速度和8口同步復(fù)制功能,支持加密U盤免解密拷貝及USB 2.0/3.0設(shè)備。支持FAT16/FAT32格式化,兼容
    的頭像 發(fā)表于 02-08 13:51 ?650次閱讀
    FB08 1對7 U盤<b class='flag-5'>拷貝</b>格式化機——高效數(shù)據(jù)復(fù)制工具

    FB16 1對15 U盤拷貝格式化機——高效數(shù)據(jù)復(fù)制工具

    FB16 1對15 U盤拷貝格式化機,采用臺灣捷美原廠工藝,具備25MB/s高速拷貝速度和16口同步復(fù)制功能,支持加密U盤免解密拷貝及USB 2.0/3.0設(shè)備。支持FAT16/FAT32格式化
    的頭像 發(fā)表于 02-07 17:36 ?652次閱讀
    FB16 1對15 U盤<b class='flag-5'>拷貝</b>格式化機——高效數(shù)據(jù)復(fù)制工具

    M.2硬盤拷貝,該怎么選擇適合的工具?FPGA拷貝機到底有沒有用?

    探索SP-B1011 M.2 FPGA硬盤拷貝機,一款支持NVMe和SATA接口的高效數(shù)據(jù)管理工具。無需計算機,即插即用,提供快速拷貝、全盤拷貝和安全抹除模式。適用于個人和專業(yè)IT人士,滿足各種數(shù)據(jù)備份和恢復(fù)需求。
    的頭像 發(fā)表于 12-12 11:02 ?951次閱讀
    M.2硬盤<b class='flag-5'>拷貝</b>,該怎么選擇適合的工具?FPGA<b class='flag-5'>拷貝</b>機到底有沒有用?

    Pythondict支持多個key的方法

    ? 在Python,字典(dict)是一種非常強大的數(shù)據(jù)結(jié)構(gòu),它允許我們通過鍵(key)來存儲和檢索值(value)。有時候,我們可能想要根據(jù)多個鍵來檢索或操作字典的數(shù)據(jù)。雖然Python
    的頭像 發(fā)表于 11-29 15:59 ?698次閱讀

    批量音頻檔案拷貝最佳方案:解決播放錯誤與拷貝不完全問題

    本文討論了在數(shù)字化時代,專業(yè)SD拷貝機在批量拷貝音頻檔案至MicroSD卡的應(yīng)用優(yōu)勢。相較于傳統(tǒng)計算機拷貝,SD拷貝機能夠完整復(fù)制包括隱藏
    的頭像 發(fā)表于 11-23 16:12 ?883次閱讀
    批量音頻檔案<b class='flag-5'>拷貝</b>最佳方案:解決播放錯誤與<b class='flag-5'>拷貝</b>不完全問題

    FB16 U盤拷貝機2種硬盤拷貝方式,隨時無痛切換# #硬核拆解 #佑華硬盤拷貝

    拷貝
    華佳興科技
    發(fā)布于 :2024年11月21日 16:00:10

    Python多線程和多進程的區(qū)別

    Python作為一種高級編程語言,提供了多種并發(fā)編程的方式,其中多線程與多進程是最常見的兩種方式之一。在本文中,我們將探討Python多線程與多進程的概念、區(qū)別以及如何使用線程池與進程池來提高并發(fā)執(zhí)行效率。
    的頭像 發(fā)表于 10-23 11:48 ?1227次閱讀
    <b class='flag-5'>Python</b><b class='flag-5'>中</b>多線程和多進程的區(qū)別