91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

簡述Python中深淺拷貝(copy)

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

掃碼添加小助手

加入工程師交流群

在工作中,常涉及到數(shù)據(jù)的傳遞,在數(shù)據(jù)傳遞使用過程中,可能會發(fā)生數(shù)據(jù)被修改的問題。為了防止數(shù)據(jù)被修改,就需要在傳遞一個副本,即使副本被修改,也不會影響原數(shù)據(jù)的使用。為了生成這個副本,就產生了拷貝。今天就說一下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無關。

淺copy

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

#例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]]

小結:

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

深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ù)類型在內存中重新創(chuàng)建一份,而不可變的數(shù)據(jù)類型則沿用之前的,所以內存中是下面這樣的:

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

小結:

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

為什么Python默認的拷貝方式是淺拷貝?

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

空間角度:淺拷貝花費內存更少。

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

總結:

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

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

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

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

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

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

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

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

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

文章轉載:CSDN

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

編輯:jq

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

    關注

    57

    文章

    4877

    瀏覽量

    90076

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    內存拷貝函數(shù) memcpy原理及實現(xiàn)

    內存拷貝函數(shù)memcpymemcpy是memory copy的縮寫,意為內存復制,在寫C語言程序的時候,我們常常會用到它。它的函原型如下:void *memcpy(void *dest, const
    發(fā)表于 12-26 08:03

    Termux調試圣誕樹Python代碼

    在Termux調試Python代碼(以圣誕樹立例)非常簡單,核心分為環(huán)境準備、代碼編寫、運行調試三個步驟,下面一步步教你操作: 一、環(huán)境準備(首次使用需做) Termux默認可能沒有Python
    發(fā)表于 12-09 09:02

    CUBEIDE調試過程,如何將數(shù)組仲的數(shù)據(jù)拷貝到電腦?

    請問,有什么辦法可以在CUBEIDE 調試過程,將數(shù)組的數(shù)據(jù)拷貝到電腦上去?
    發(fā)表于 09-09 07:20

    linux虛擬環(huán)境調用Linux 版matlab編譯的python庫時出錯

    、readme.txt、 requiredMCRProducts.txt、init.py、CAO_python.ctf。 在linux環(huán)境按照以下步驟安裝matlab runtime2018b: ① cd到MCR
    發(fā)表于 07-18 10:40

    基礎篇3:掌握Python的條件語句與循環(huán)

    Python編程語言中,條件語句和循環(huán)是構成復雜邏輯和數(shù)據(jù)處理的基石。本篇基礎教程將幫助您深入了解Python的條件語句和循環(huán)結構,讓您能夠更好地控制程序流程。 條件語句 條件語句允許程序根據(jù)
    發(fā)表于 07-03 16:13

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

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

    零基礎入門:如何在樹莓派上編寫和運行Python程序?

    在這篇文章,我將為你簡要介紹Python程序是什么、Python程序可以用來做什么,以及如何在RaspberryPi上編寫和運行一個簡單的Python程序。什么是
    的頭像 發(fā)表于 03-25 09:27 ?2058次閱讀
    零基礎入門:如何在樹莓派上編寫和運行<b class='flag-5'>Python</b>程序?

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

    /environment-setup-cortexa7hf-neon-poky-linux-gnueabi elf@ubuntu:~/work/test/03_內核空間與用戶空間的數(shù)據(jù)拷貝/copy_form_user$ make 將驅動模塊編譯成.ko并傳到開發(fā)板
    發(fā)表于 03-22 09:25

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

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

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

    /environment-setup-cortexa7hf-neon-poky-linux-gnueabi elf@ubuntu:~/work/test/03_內核空間與用戶空間的數(shù)據(jù)拷貝/copy_form_user$ make 將驅動模塊編譯成.ko并傳到開發(fā)板
    發(fā)表于 03-21 13:58

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-內核空間與用戶空間的數(shù)據(jù)拷貝之數(shù)據(jù)拷貝介紹

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

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

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

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

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

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

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

    USB3.0移動硬盤拷貝機 如何選 ?

    捷美USB3.2移動硬盤拷貝機專為大規(guī)模硬盤復制設計,一次可同時復制40顆硬盤,僅需3.5小時完成,比傳統(tǒng)計算機拷貝快500%。采用一鍵式操作,無需人工監(jiān)控,降低人力成本。內建bit to bit比對功能,確保數(shù)據(jù)完整性和安全性。獨立運行,開機即用,無需計算機或額外軟件,
    的頭像 發(fā)表于 03-18 17:16 ?1426次閱讀
    USB3.0移動硬盤<b class='flag-5'>拷貝</b>機 如何選 ?