官方說法有對深拷貝和淺拷貝的解釋兼搏,之前面試的時候卵慰,也有被問到,但是實際上我?guī)缀鯖]有用上過佛呻,今天剛好用上了裳朋,總結(jié)一下,至于官方解釋吓著,關(guān)于淺拷貝只是拷貝了引用鲤嫡,深拷貝另辟空間的各種說法,大家可以自行g(shù)oogle绑莺,我就簡單記錄一下使用暖眼。
1、我們最常用的拷貝是使用=纺裁,例如
>>>a = [11,22,33]
>>>b = a
>>>id(a)
25084152
>>>id(b)
25084152
>>>b.append(44)
>>>a
[11,22,33,44]
>>>b
[11,22,33,44]
可以發(fā)現(xiàn)诫肠,如果使用這種方式的話,a改變的時候,b也會改變区赵,有很多情況下惭缰,我們不希望這樣,那么這種情況如何解決呢笼才?
2漱受、copy.copy()
一般深拷貝和淺拷貝用在操作{}和[],例如:
a = {
? ? 'a': 1,
? ? 'b': 2,
}
如果想拷貝a給b,但是又不想出現(xiàn)上面1的情況骡送,就可以使用淺拷貝copy(),那樣a的值改變昂羡,就不會影響到b的值了
b = copy.copy()
3、copy.deepcopy()
但是有時候摔踱,字典或者列表里面會嵌套字典或者其他虐先,這時候,如果還是使用淺拷貝的話派敷,嵌套的那個字典就會出現(xiàn)1所說的情況蛹批,就是a中的嵌套字典改變的時候,b的嵌套字典也會改變篮愉,所有這時候腐芍,可以使用深拷貝
a = {
? ? 'a': 1,
? ? 'b': 2,
? ? 'c': {
?? ?? ? 'd': 4
}
}
b = copy.deepcopy()
這樣a,b就不會被相互影響了。