- 淺復(fù)制使用copy.copy()函數(shù),深復(fù)制使用copy.deepcopy()函數(shù)
- 創(chuàng)建的淺副本不會克隆子對象,副本和原對象不完全獨立.
- 對象的深副本將遞歸克隆子對象,副本完全獨立于原對象,但創(chuàng)建深副本的速度較慢.
代碼
xs = [[1,2,3],[4,5,6],[7,8,9]]
ys = list(xs) # 淺復(fù)制 , 也可以使用copy.copy()創(chuàng)建淺副本
xs.append(['new list']) #xs里添加一個新列表
print(ys) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]] , ys不變,仍然含有xs子對象的引用
xs[1][0] = 'XXX' # 修改xs子對象
print(ys) # [[1, 2, 3], ['XXX', 5, 6], [7, 8, 9]] # xs的改動會反映在ys中,因為淺復(fù)制后,這兩個列表共享相同的子對象.
import copy
xs = [[1,2,3],[4,5,6],[7,8,9]]
zs = copy.deepcopy(xs) # 深復(fù)制
xs[1][0] = 'XXX' # 修改xs子對象
print(zs) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]] , zs不變.