Python3之淺談----深拷貝與淺拷貝

geek_xiong發表於2018-09-01

淺拷貝

淺拷貝指在賦值過程中,只複製一層變數,不會複製深層變數繫結的物件的複製過程
例項:

>>> L = [3.1,3.2]
>>> L1 = [1,2,L]
>>> L2 = L1.copy()
>>> L1
[1, 2, [3.1, 3.2]]
>>> L2
[1, 2, [3.1, 3.2]]

>>> L2[1] = 3
>>> L1
[1, 2, [3.1, 3.2]]
>>> L2
[1, 3, [3.1, 3.2]]

>>> L2[2][0] = 3.14
>>> L1
[1, 2, [3.14, 3.2]]
>>> L2
[1, 3, [3.14, 3.2]]

>>> L[1] = 1111
>>> L1
[1, 2, [3.14, 1111]]
>>> L2
[1, 3, [3.14, 1111]]
>>> 

深拷貝

複製物件及關聯的物件一起復制的過程叫深拷貝

例項:

>>> import copy
>>> L = [3.1,3.2]
>>> L1 = [1,2,L]
>>> L2 = copy.deepcopy(L1)
>>> L1
[1, 2, [3.1, 3.2]]
>>> L2
[1, 2, [3.1, 3.2]]

>>> L2[2][0] = 3.14
>>> L1
[1, 2, [3.1, 3.2]]
>>> L2
[1, 2, [3.14, 3.2]]

>>> L[1] = 222222
>>> L1
[1, 2, [3.1, 222222]]
>>> L2
[1, 2, [3.14, 3.2]]

淺拷貝 vs 深拷貝

說大白話:
淺拷貝雖然說是拷貝,但也是 “ 身不由己 ” ,當改除了一層之外的值時,都會改動(這時不管是不是拷貝的,都改,看淺拷貝的栗子就知道了吧,內嵌列表表面上也拷貝過來了,但實際還是不是自己說了算的,只要改了內嵌列表的值,拷貝的也要改,這就是隻拷貝一層,內嵌的就無能為力了)

深拷貝就是徹底的拷貝,兩者就再毫無關係,雖然拷貝完不改的話長的一樣,但是不管對誰改動,另一個也是毫不受影響,詳細看深拷貝。

本節完

相關文章