淺拷貝只複製父物件,其內部的子物件不複製。可通過copy.copy實現。
深拷貝不僅複製父物件,還複製子物件,相當於重新生成了乙個一模一樣的物件。
import copy
a = [1, 2, 3]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
e = list(a)
print("a address: ", id(a))
print("b address: ", id(b))
print("c address: ", id(c))
print("d address: ", id(d))
print("e address: ", id(e))
結果:
我們可以看到b的位址和a一樣,這是因為b僅僅是a的引用的原因
c,d,e分別對應淺拷貝,深拷貝,淺拷貝
再看另乙個例子:
import copy
a = [1, 2, 3]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
e = list(a)
print("a: ", a)
print("b: ", b)
print("c: ", c)
print("d: ", d)
print("e: ", e)
結果:
在這裡我們可以看到,a變,b跟著變了,而深拷貝和淺拷貝都沒有發生變化,這是因為數字是不可變型別。
常見的不可變型別有:
- 數字
- 字串
- 元組
第三個例子:
import copy
a = [[1, 2], 1, 2, 3]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
e = list(a)
print("a: ", a)
print("b: ", b)
print("c: ", c)
print("d: ", d)
print("e: ", e)
結果:
這裡我們可以看到僅深拷貝沒有發生變化,這是因為深拷貝不僅拷貝了父物件即列表a,還拷貝了子物件即a中的[1, 2]。列表是可變物件,所以淺拷貝都隨著a的變化而變化了。
可變型別:
- 列表
- 字典
順便說一下可變與不可變型別:
可變型別不論值相不相同位址都不同。
不可變物件值相同則位址相同。
參考:
Python 之深拷貝與淺拷貝
變數最終是儲存於記憶體中的,儲存於記憶體內的一塊空間之中 深拷貝是將記憶體中a類 指標類 指向最終的值,複製到其他記憶體區塊中 淺拷貝只是複製指標,指向記憶體區塊import copy deffun3 print 深拷貝 淺拷貝 預設 alist 1 2,3 a b 淺拷貝 c copy.copy ...
轉 Python深複製淺複製or深拷貝淺拷貝
copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy a 1,2,3,4,a b c b a c copy.copy a d copy.deepcopy a 很容易理解 a是乙個...
python之深拷貝 淺拷貝
來自於牛客網,刷題時候遇到的 題目 下面 執行後,a b c d四個變數的值,描述錯誤的是?import copy a 1,2,3,4,a b b a c copy.copy a d copy.deepcopy a 5 選項 a 1,2,3,4,a b c 5 b 1,2,3,4,a b c 5 c...