列表的复制

来源:互联网 发布:倩女幽魂mac下载 编辑:程序博客网 时间:2024/05/22 00:14

列表的复制问题

一、浅复制
实例1
两者的地址相同,即他们是同一个内存对象的引用,无论怎么改变l2,l1也将改变。
这里写图片描述
结果是:
这里写图片描述

二、深复制
1 使用copy模块的deepcopy()函数
这里写图片描述
结果是:
这里写图片描述
两者的地址不同,说明他们不是同一个内存对象的引用。
观察其中的元素的地址
这里写图片描述
结果是:
这里写图片描述
可以观察到其中的可变类型如列表的地址不同,但是不可变类型元素地址相同。
但是任意的改变l2对l1没有影响。
这里写图片描述
结果是:
这里写图片描述
即怎么改变两者都没关系了,可变类型改变也是。L2无论怎么改,对l1没有影响。

2切片(可变类型仍指向同一个对象)
这里写图片描述
其中直接切片的话所有元素地址都相同。注意:可变类型元素也相同。
这里写图片描述
改变其中的不可变类型元素,两者无关。但是对于不可变类型的操作,两者相关,你变我也变。直接替换两者无关。
这里写图片描述
结果是:
这里写图片描述
若直接将l2[3]不是进行操作,而是替换,两者又无关。
这里写图片描述
结果是:
这里写图片描述

总结:
浅复制:两者指向同一内存对象
深复制:两者指向不同内存对象,deepcopy()彻底无关,切片在进行可变元素操作时两者 相关。

0 0