1. 程式人生 > >python-之-深淺拷貝一

python-之-深淺拷貝一

分享 hid 結果 cli view pre 嵌套 abc cfb

深淺拷貝

一、數據為不可變類型 (str、int、bool)

技術分享圖片

技術分享圖片
import copy

v1 = "abc"
v2 = copy.copy(v1)   
v3 = copy.deepcopy(v1)

print(v1 == v2)

print(v1 is v2) 
print(v1 is v3) 

輸出結果:

True

True

True
View Code

小結:數據為不可變類型時,淺和深拷貝的值一樣,且指向同一內存地址。(不考慮小數據池)

二、數據為可變類型 (list、set、dict)

1、沒有嵌套的情況

技術分享圖片
import copy

v1 = [1,2,3,4,5]
v2 = copy.copy(v1)
v3 = copy.deepcopy(v1)

print(v1 == v2 == v3)

print(v1 is v2) 
print(v1 is v3) 

輸出:

True

False

False
View Code

技術分享圖片

小結:沒有嵌套的情況,深淺拷貝也是一樣的,都拷貝第一層。

2、有嵌套的情況:

技術分享圖片
import copy

v1 = [1,2,3, [4, 5, 6]]
v2 = copy.copy(v1)
v3 
= copy.deepcopy(v1) print(v1 == v2 == v3) print(v1 is v2) print(v1 is v3) print(v1[3] is v2[3]) print(v1[3] is v3[3]) print(v2[3] is v3[3]) print(v1[3][0] is v2[3][0]) print(v1[3][0] is v3[3][0]) print(v2[3][0] is v3[3][0]) 輸出: True False False True False False True True True
View Code

技術分享圖片

小結:在嵌套的情況下:

淺拷貝:拷貝第一層

深拷貝:拷貝嵌套下面所有可變類型

總結:

淺拷貝:只拷貝第一層

深拷貝:拷貝嵌套層次中的所有可變類型

python-之-深淺拷貝一