当前位置: 首页 > 后端技术 > Python

Python基础教程:List深拷贝详解

时间:2023-03-26 15:33:00 Python

List有一个copy()方法,意思是复制一个相同的list。例如names=["Xiaoming","Xiaohong","Xiaohei","Xiaohuang","Xiaobai"]#复制names赋值给names2variablenames2=names.copy()#分别输出namesnames2print(names)print(names2)这时候你会发现结果是一样的,那么问题来了,如果我要把names列表中的黄色改成EnglishYellow,names2中的黄色会不会改变呢?写一段代码看看names=["小明","小红","小黑","小黄","小白"]#复制names并赋值给namesvariablenames2=names.copy()#修改names列表中的小黄names[3]="Yellow"#outputnamesnames2print(names)print(names2)看结果,只是把names列表中的小黄改成Yellow,names2列表没变,在其实原理很简单,如下图,首先names指向一个list,然后复制一份names,赋值给names2,由于修改了第一个list中的黄色,所以第二个list是不受影响。所以现在我更改此列表并从名称列表中添加另一个列表,以下代码'''有问题没有人回答吗?小编创建了一个Python学习交流QQ群:531509025,寻找志同道合的小伙伴,互相帮助。群里还有不错的视频学习教程和PDF电子书!'''names=["小明","小红",["张三","李四","王舞"],"小黑","小黄","小白"]#复制一份Copylistnames2=names.copy()#把lisi改成英文names[2][1]="lisi"print(names)7print(names2)这段代码的结果是两个list中的lisi都改成了英文,我们来分析一下原理。其实这张图很简单,就是中间的链表分配一个单独的空间,然后从一级链表开始引用地址。复制的names2也是引用的地址,所以是真的。的值一改变,两个列表的内层列表的值也随之改变。也就是说list.copy()方法只能复制一层,也就是所谓的浅拷贝。补充:第二个列表复制第一个列表,其实第二个列表的每个元素都是对第一个列表每个元素的引用实现浅拷贝的三种方法importcopynames=["小明","小红","小黑","小黄","小白"]#轻拷贝1.names1=copy.copy(names)#2.names2=names[:]#3.工厂函数names3=list(names)深拷贝的方法importcopynames=["小明","小红","小黑",["pink"],"小黄","小白"]#深拷贝deep_names=copy.deepcopy(names)#修改pink为Pinknames[3][0]="Pink"#分别打印出两个列表print(names)print(deep_names)输出结果为:['小明','小红','小黑',['粉红'],'小黄','小白']['小明','小红','小黑',['粉红'],'小黄','小白']