python的深淺拷貝

來源:互聯網
上載者:User

標籤:end   不同的   列表   引用   一個   數字   布爾值   找不到   解釋   

定義:

在python中對象的賦值其實就是對象的引用。當建立一個對象,把它賦值給另一個變數的時候,python並沒有拷貝這個對象,只是拷貝了這個對象的引用而已。

淺拷貝:拷貝了最外圍的對象本身,內部的元素都只是拷貝了一個引用而已。也就是,把對象複製一遍,但是該對象中引用的其他對象只是拷貝引用。

深拷貝:外圍和內部元素都進行了拷貝對象本身,而不是引用。也就是,將全部的對象都複製一遍。

幾個術語的解釋:
  1. 變數:是一個系統資料表的元素,擁有指向對象的串連空間
  2. 對象:被分配的一塊記憶體,儲存所代表的值
  3. 引用:是自動形成的從變數到對象的指標
  4. 不可變對象:一旦建立就不可修改的對象,包括字串、元組、數字和布爾值
  5. 可變對象:可以修改的對象,比如列表、字典
深淺拷貝的作用:

   1、減少記憶體的使用

   2、在做資料的清洗、修改或者入庫的時候,對原資料進行複製一份,以防資料修改之後,找不到原資料。

對於不可變對象的深淺拷貝:

不可變物件類型,沒有被拷貝的說法,即使是用深拷貝,查看id的話也是一樣的,如果對其重新賦值,也只是重新建立一個新的對象,替換掉舊的而已。

一句話就是,不可變類型,不管是深拷貝還是淺拷貝,地址值和拷貝後的值都是一樣的。

import copy‘‘‘tu = (1,2,3,(3,4,5))tu_1 = copy.deepcopy(tu) #對於不可變對象,深淺拷貝都一樣,拷貝的是記憶體位址tu_1 = (3,4,5) #值改變,地址也會改變# print(id(tu),id(tu_1))#拷貝 - 可變對象li_1 = [1,2,3,4,[5,6,7]]# ‘=‘ 記憶體位址一樣,指向的是同一個對象li_2 = li_1print(id(li_1),id(li_2)) # 2826200972232 2826200972232li_2[4].append(‘90000‘)print(li_1) #li_2發生了改變 li_1也會發生改變# copy - 淺拷貝 只拷貝第一層和第二層的地址引用li_2 = copy.copy(li_1)print(id(li_1[4]),id(li_2[4])) #裡面第二層的list地址一樣,證明指向的是同一個東西#只改變最外面一層,對另一個沒有影響li_1.append(‘789‘)print(li_2)  # [1, 2, 3, 4, [5, 6, 7]]#如果改變第二層,另一個也會改變li_1[4].append(‘改變的東西‘)print(li_2) # [1, 2, 3, 4, [5, 6, 7, ‘改變的東西‘]]# deepcopy - 深拷貝 將所有層的東西都複製一遍li_1 = [1,2,3,4,[5,6,7]]li_2 = copy.deepcopy(li_1)print(id(li_1),id(li_2)) #第一層地址不同print(id(li_1[4]),id(li_2[4])) #第二層地址不同#第一個li_1發生改變 跟li_2沒有關係li_1[4].append(‘li_1發生了改變‘)print(li_2) # [1, 2, 3, 4, [5, 6, 7]]‘‘‘

 對於可變對象的深淺拷貝:

‘=’:淺拷貝:值相等,地址相等

copy淺拷貝:值相等,地址不相等,第二層拷貝的是記憶體位址,指向的是同一個東西

deepcopy深拷貝:值相等,地址不相等。

總結:
  • 深淺拷貝都是對來源物件的複製,佔用不同的記憶體空間
  • 不可變類型的對象,對於深淺拷貝毫無影響,最終的地址值和值都是相等的
  • 可變對象
    •   ‘=’:淺拷貝,值相等,地址相等
    • copy淺拷貝:值相等,地址不相等,第二層拷貝的是記憶體位址,指向的是同一個東西
    • deepcopy深拷貝:值相等,地址不相等,兩個獨立的對象

python的深淺拷貝

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.