深浅拷贝

需求:想拷贝原列表,产生一个新的列表,而且想让两个列表完全区分开,互不影响,针对改操作,而不是读操作。

浅copy:
list1=['jake','rose',[1,2]]
list2=list1.copy()

list1和list2的内存地址不同
但是list1[0]与list2[0]的内存地址是相同的
总结:浅copy时,不可变类型的重新赋值,会改变原本的id,所以不会影响到新的列表,
但是可变类型的特性(值改变,id不变),所以旧列表种的可变类型发生改变,会影响到新的列表。

深copy:
import copy
list1=['jake','rose',[1,2]]
list3=copy.deepcopy(list1)

深copy时候,原列表的不可变类型的id都会被copy,但是可变类型会被赋予新的id地址。
总结:由于不可变类型的特性(值变,id变),所以不会影响到新的列表。
但是新列表的可变类型都被赋予了新的id,所以旧列表的可变类型发生变化时,也不会影响到新的列表。

ps:若列表中只存在不可变类型可使用浅copy,若有不可变类型存在建议使用深copy.

可变不可变类型:https://www.cnblogs.com/bailongcaptain/p/12430126.html

posted @ 2020-03-09 17:43  江湖有梦  阅读(96)  评论(0编辑  收藏  举报