先談淺拷貝:
淺拷貝拷貝的是地址引用,可以找到共同的內(nèi)容,原文件內(nèi)容修改,拷貝的那份也會(huì)修改。
例子:
a = [1,2,3]
b = a
print(id(a))
print(id(b)--------他們兩個(gè)的地址是相同的裁着,內(nèi)容也是一樣的
a.append(4)
print(a)
print(b)-------a添加了4,b也會(huì)跟著變化拱她。
再談深拷貝:
深拷貝的內(nèi)容一樣二驰,但是地址不一樣,就算是一方文件修改秉沼,另外一方不會(huì)變化桶雀。
b ?= copy.deepcopy(a)
b得到的內(nèi)容與a的內(nèi)容完全是一樣的,但是地址不會(huì)一樣唬复,就算是a中有對(duì)象引用矗积,b中對(duì)應(yīng)的引用的對(duì)象依然是內(nèi)容一樣,地址不一樣
import copy
a = [1,2,3,4]
b = copy.deepcopy(a)
print(id(a))
print(id(b))
a.append(5)
print(a)
print(b)
注意:如果是一個(gè)不可變的對(duì)象(內(nèi)部存儲(chǔ)還是不可變對(duì)象)敞咧,那時(shí)候就是淺拷貝棘捣,得到的地址也是一樣的
a = (1,2,3,4)
b = copy.deepcopy(a)
print(id(a))
print(id(b))
print(a)
print(b)
copy.copy()這個(gè)函數(shù)結(jié)果會(huì)因?yàn)槭强勺兊幕騽t是不可變的而導(dǎo)致結(jié)果不同 ?只能拷貝一層。根據(jù)類型有關(guān)休建。若果是列表乍恐,就是深拷貝评疗,若果是元組,就是淺拷貝禁熏,如果是有嵌套壤巷,淺拷貝邑彪。
可變的時(shí)候是深拷貝:
a = [1,2,3,4]
b = copy.copy(a)
print(id(a))
print(id(b))
a.append(5)
print(a)
print(b)
不可變的時(shí)候是淺拷貝:
a = (1,2,3,4)
b = copy.copy(a)
print(id(a))
print(id(b))