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