Python中的深拷貝與淺拷貝


淺拷貝只拷貝了最頂層的,深拷貝拷貝了所有

拷貝牽扯到以下幾種形式:

  • 賦值操作符=
  • copy.copy
  • copy.deepcopy
  • 列表中的切片[:]
  • 字典中的拷貝.copy()
  • 列表作為函數參數

1. 當拷貝內容為可變類型時

首先以列表為例,來看python中的深拷貝與淺拷貝:

如下圖,a和b的地址是一樣的,b只是指向了a的地址。

copy.copy后,d只是開辟了一段新的空間,拷貝了c的引用

copy.deepcopy,是直接拷貝了內容。

 簡單總結:=就是指向原地址,copy.copy會開辟一個新地址,內部拷貝了可變類型當時的引用;copy.deepcopy所有元素都拷貝

2. 當拷貝內容為不可變類型時

這里以元組為例

簡單總結:當拷貝的內容為不可變類型,無論哪種方法都只是簡單引用,不會開辟新地址

3. 當拷貝內容為不可變類型但包含可變類型

簡單總結:只要包含可變元素,deepcopy就完全拷貝

4. 列表切片中的拷貝

簡單總結:列表切片中的拷貝,可copy.copy一樣,是淺拷貝

5. 字典中的拷貝

基本認識:字典是無序的,每一個key通過哈希來得到,字典中存儲的是key的引用

6. 列表作為函數參數傳入

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM