在 Python 中瘫里,淺拷貝和深拷貝是兩種不同的拷貝方式沐兵,用來(lái)復(fù)制對(duì)象依沮。它們的區(qū)別主要體現(xiàn)在是否遞歸復(fù)制對(duì)象內(nèi)部的子對(duì)象。
import copy
#原始列表
original_list = [1,2,3,[4,5,['T','E','S','T']]]
#原始列表直接賦值給新的列表
new_list = original_list
#淺拷貝
shallow_copied_list = original_list .copy()
#深拷貝
deep_copied_list = copy.deepcopy(original_list )
1. 淺拷貝 (shallow copy)
淺拷貝只復(fù)制對(duì)象本身庭瑰,而不會(huì)遞歸復(fù)制它包含的子對(duì)象星持。換句話(huà)說(shuō),淺拷貝的新對(duì)象和原對(duì)象共享子對(duì)象的引用弹灭。
外層對(duì)象:original_list
和 shallow_copied_list
是兩個(gè)獨(dú)立的對(duì)象督暂。
內(nèi)層對(duì)象(嵌套列表):它們共享同一個(gè)引用揪垄。當(dāng)修改 shallow_copied_list
中的嵌套列表元素時(shí),original_list
中的嵌套列表也會(huì)改變逻翁。
兩個(gè)列表的外層是不同的對(duì)象饥努,但它們的嵌套列表是同一個(gè)對(duì)象。
修改原始列表里的值:
import copy
original_list = [1,2,3,[4,5,['T','E','S','T']]]
new_list = original_list
shallow_copied_list = original_list.copy()
deep_copied_list = copy.deepcopy(original_list)
original_list[1] = 999
original_list[3][1] = 999
2. 深拷貝 (deep copy)
深拷貝會(huì)遞歸地復(fù)制對(duì)象本身以及它包含的所有子對(duì)象八回,因此新對(duì)象和原對(duì)象完全獨(dú)立酷愧。
外層對(duì)象:original_list
和 deep_copied_list
是獨(dú)立的對(duì)象。
內(nèi)層對(duì)象(嵌套列表):deep_copied_list
中的嵌套列表是原對(duì)象的深拷貝缠诅,因此兩者互不影響溶浴。
總結(jié):
淺拷貝:只復(fù)制最外層的對(duì)象,內(nèi)層對(duì)象引用共享管引。
深拷貝:遞歸復(fù)制所有層級(jí)的對(duì)象士败,每個(gè)對(duì)象都是獨(dú)立的。