python中深淺拷貝

2021-01-10 路客技術宅

大家在面試的時候經常會遇到一個這樣的問題:請問python中的深淺拷貝有什麼區別?

下邊就簡單給大家總結一下這個問題:

一、直接賦值拷貝,比如:a=b

(1)數字和字符串在內存中是同一塊地址

(2)字典、列表、元組等其他類型也是同一塊內存地址,不發生變化

賦值:a=b

二、淺拷貝

淺拷貝需要導入copy模塊,並調用其copy方法。比如:b = copy.copy(a)

(1)數字和字符串在內存中是同一塊地址

(2)無嵌套的列表和字典,如a=[1,2,3]或a={'username':'zhangsan','password':123},內存地址會改變

(3)無嵌套的元組,如a=(1,2,3),在內存中是同一塊地址

(4)字典中嵌套列表,如a= {'username':'zhangsan','password':123,'code':[1,2,3]},第一層的內存地址會改變,其他的內存地址不發生改變。看下圖可以比較清楚了解。

淺拷貝:嵌套模式

三、深拷貝

淺拷貝需要導入copy模塊,並調用其deepcopy方法。比如:b = copy.deepcopy(a)

先上一個在pycharm中運行結果的圖

pycharm深拷貝

深拷貝的話記住一點:一定會每層重新新開闢一塊內存,但是最裡邊的最小元素,如zhangsan,123,[1,2,3],不會發生改變。如下圖所示:

深拷貝:嵌套模式

以上就是針對大多數情況的一個總結了,其實還有其他情況,但是大同小異,相信大家可以通過實驗自己得出結論。

相關焦點

  • Python 拓展之詳解深拷貝和淺拷貝
    其實單從表面意思來說,copy 就是將某件東西再複製一份,但是在很多程式語言中,比如 Python,C++中,它就不是那麼的簡單了。在這裡,我們只需要知道的是,當 copy() 的時候,列表這類由字符串,數字等複合而成的對象仍然是複製了引用,也就是貼標籤,並沒有建立一個新的對象,我們把這種拷貝方式叫做淺拷貝(唉呀媽呀,終於把這個概念引出來了。。,言外之意就是並沒有解決深層次的問題,再言外之意就是還有能夠解決深層次問題的方法。
  • JS之函數傳參與深淺拷貝原理
    很多問題看似複雜,沒有章法,事實上卻有著千絲萬縷的聯繫,陳道長此次闡述因為數據類型不同而引發的問題,本文主要探討JS函數參數傳遞規則、淺拷貝、深拷貝的原理。變量類型和存儲首先要明確js中變量的特點,JS變量本身沒有類型,只有值有類型。這句話怎麼理解呢,先看下面這段代碼。
  • Python中又一對有趣的功能:淺拷貝與深拷貝
    先把淺拷貝與深拷貝的概念拋出來:淺拷貝:不考貝子對象的內容,只拷貝子對象的引用。調用Python內置函數copy(源對象)。深拷貝:子對象的內存也會被拷貝一份,並且對子對象的修改不會影響源對象。調用Python內置函數deepcopy(源對象)。
  • Python 深拷貝、淺拷貝
    淺拷貝淺拷貝是對於一個對象的頂層拷貝通俗的理解是:拷貝了引用,並沒有拷貝內容2. 深拷貝深拷貝是對於一個對象所有層次的拷貝(遞歸)進一步理解深拷貝3. 拷貝的其他方式分片表達式可以賦值一個序列字典的copy方法可以拷貝一個字典4.
  • Python 標準庫之 sys & copy
    在諸多的 sys 函數和屬性中,我選幾個常用的來說明:1.sys.argvsys.argv 是專門用來向 Python 解釋器傳遞參數的,所以稱之為「命令行參數」,下面先解釋一下什麼是命令行參數:$ python3 --versionPython 3.6.5這裡的 --version 就是命令行參數,如果使用
  • gRPC Python 入門到生產環境
    我選的後者,本地命令如下:# 下載在 https://github.com/google/protobuf/releases 下載 protoc-3.5.1-osx-x86_64.zip# 解壓unzip protoc-3.5.1-osx-x86_64.zip -d protoc# 拷貝sudo cp protoc/bin/protoc /usr/bin/# 增加可執行的權限sudo
  • 玩轉Python 中的隨機數
    開發中我們經常遇到需要隨機數的場景,比如為了用戶密碼更安全我們有時會加鹽,也就是將用戶原密碼連接上一串隨機字符然後加密保存,又比如我們可能需要隨機展示某張圖片等等。今天,我們就來理一理 Python 中的隨機數的玩法,當然,這裡只涉及標準庫。
  • Python2.7下如何安裝easy_install和pip
    easy_install是一個python的擴展包,主要是用來簡化python安裝第三方安裝包,在安裝了easy_install之後,安裝python第三方安裝包就只需要在命令行中輸入:easy_install packagename,然後程序會自動搜索相應版本的安裝包並配置各種文件,免去了手工下載安裝的複雜度
  • 一步一步帶你理解 Python 中的淺複製與深複製
    Python 中的賦值語句不會對對象進行拷貝,僅僅是將變量名指向對象。對於不可修改的對象來說,這種機制不會影響我們日常的使用。但是,對於可修改的對象,你偶爾可能需要對該對象做一個真正的複製。何為真正的複製?就是修改拷貝來的對象不會影響原來的對象。Python 中內置的可修改的集合類對象,比如列表、字典、集合等,可以直接使用對應的工廠方法進行拷貝。
  • Python 程式設計師如何防止數據被修改?
    作者 | PayneLi責編 | 郭芮在平時工作中,經常涉及到數據的傳遞。在數據傳遞使用過程中,可能會發生數據被修改的問題。為了防止數據被修改,就需要再傳遞一個副本,即使副本被修改,也不會影響原數據的使用。為了生成這個副本,就產生了拷貝——今天就說一下Python中的深拷貝與淺拷貝的問題。
  • Python 爬蟲面試題 170 道
    Python 的基礎語法語法常見的 Python 應用場景掌握 Python 閉包的使用以及裝飾器的使用生成器和迭代器的使用常見的設計模式的使用深淺拷貝的區別15.Python 代碼縮進中是否支持 Tab 鍵和空格混用。16.是否可以在一句 import 中導入多個庫?17.在給 Py 文件命名的時候需要注意什麼?
  • python用10行代碼寫一個USB病毒
    但是,如果我想,比如,當一個usb插入時,在後臺自動把usb裡的重要文件神不知鬼不覺地拷貝到本地或者上傳到某個伺服器,就需要特殊的軟體輔助。於是我心想,能不能用python寫一個程序,讓它在後臺運行。每當有u盤插入的時候,就自動拷貝其中重要文件。如何判斷U盤的插入與否?
  • 什麼是拷貝紙?拷貝紙的介紹
    拷貝紙是一種生產難度大的高檔文化工業用紙。該產品的技術特點是:物理強度高、均勻性、透明性、外觀性能都比較好,紙張表面細膩、平整、光滑、無氣泡砂、具有良好的印刷性能。一般來說,印刷紙的生產分為兩個基本過程:製漿和造紙。製漿是通過機械、化學或兩者聯合方法將植物纖維分離成天然紙漿或漂白紙漿。
  • python數據科學系列:numpy入門詳細教程
    numpy:numerical python縮寫,提供了底層基於C語言實現的數值計算庫,與python內置的list和array數據結構相比,其支持更加規範的數據類型和極其豐富的操作接口,速度也更快numpy中支持5類創建數組的方式:以上方法中,最為常用的是方法1、2、5。
  • python基礎知識科普:python的起源和發展史以及應用場景
    簡單地說,你可以自由地發布這個軟體的拷貝、閱讀它的原始碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。這是為什麼Python如此優秀的原因之一——它是由一群希望看到一個更加優秀的Python的人創造並經常改進著的。
  • Python數據類型串講(中)
    序列中每個位置的元素都有其對應的唯一編號,也就是說我們可以通過元素的位置標識,去搜索到該元素。python中的內建序列有6種:列表、元祖、字符串、Unicode字符串、xrange對象、buffer對象,其中列表和元祖是最常見的序列,應重點掌握。字符串在上一篇文章中已簡單介紹,下面將以字符串為例,對序列的通用操作進行詳講。
  • 奇妙的Python編程之旅:字符串拼接,格式化輸出和深淺複製
    我們學了序列類型有字符串(str)、列表(list)、元組(tuple),今天我們來學習一下字符串的拼接、格式化輸出與深淺複製。開發工具:IDLE (Python 3.7 64-bit) (註:不需要3.7版本的也行,只需要Python3的版本都可以,32位和64位的系統都可以不需要糾結)
  • Python利用openpyxl處理excel文件(openpyxl的安裝及簡介)
    但是試想,如果把上述excel公式變成諸如python中的if-else結構,其可讀性肯定是不容置疑的……今天,我們來介紹一款excel處理利器—openpyxl(python庫文件)。根據openpyxl官方文檔,結合個人近年來使用心得,總結openpyxl應用中以下幾個知識點:(一)openpyxl的安裝、導入及相關注意事項;(二)對excel文件的打開、讀寫、編輯、保存相關;(三)對excel文件中樣式的編輯;(四)對excel文件中單元格及行列的操作;(五)在excel文件中公式及圖表的簡單操作
  • 「黑技能」——python檢測u盤並「偷偷」複製內容!
    這兩天在網上又發現python一個比較好玩的庫psutil,它是用來輕鬆獲取系統運行的進程和系統利用率,包括CPU、內存、磁碟、網絡等信息。也就是說用它來獲取硬體狀態信息的唄!然後一個「邪念」浮出腦海——打槍的不要,「偷偷」拷貝別人U盤內容!
  • Python 爬蟲面試題 170 道:2019 版
    Python 的基礎語法語法常見的 Python 應用場景掌握 Python 閉包的使用以及裝飾器的使用生成器和迭代器的使用常見的設計模式的使用深淺拷貝的區別59.python 字典和 json 字符串相互轉化方法60.請寫一個 Python 邏輯,計算一個文件中的大寫字母數量高級特效70.函數裝飾器有什麼作用?請列舉說明?71.Python 垃圾回收機制?