1 .清单浅副本
list_1=[1,[ 22,33,44 ],[ 5,6,7 ],{'name': 'Sarah'}]
第一种复制方法: list_2=list_1.copy (
第二种复制方式: list_2=list_1[:]
请注意,直接list_2=list_1错误!
这样,只要给list_1加上别名,对list_2进行添加、删除和更改操作,list_1也会发生更改,如下图所示
浅拷贝也有一些问题。 如果list_1包含可变对象(如列表、词典等),则修改list_2中的可变对象时,list_1也会发生以下变化:
这些问题是由列表中较低级别的实现引起的。
2实现列表中的较低级别
列表中元素的地址是连续的
列表中存储的实际上是这些元素的地址! ——列表中的元素可以分散存储在内存中
list_1和list_2的基本实现如下: 因此,对于列表元素的基本数据类型,请指向值。 名单,鼻祖的,指其地址; 词典时为词典散列表值
由于基本数据类型和元素是不变的,因此更改list_2将指向新的数字或元组地址
清单和词典指向同一个地址
3清单的深层副本
深度复制可以复制、完全隔离、清晰所有级别的相关元素,从而避免上述问题