ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python基础教程:列表深浅复制详解

2021-07-09 22:01:42  阅读:210  来源: 互联网

标签:names2 Python 小黄 列表 详解 names 基础教程 print copy


列表有个 copy() 方法,意思是复制一个相同的列表。例如 ```python names = ["小明", "小红", "小黑", "小黄", "小白"] # 把 names 复制,赋值给 names2 变量 names2 = names.copy() # 分别输出 names names2 print(names) print(names2) ``` 这时会发现结果是一样的,那么问题来了,我要把 names 列表中的 小黄改成英文 Yellow,那么 names2 的小黄会发生变化吗?写一段代码看看 ```python names = ["小明", "小红", "小黑", "小黄", "小白"] # 把 names 复制,赋值给 names 变量 names2 = names.copy() # 修改 names 列表中的 小黄 names[3] = "Yellow" # 分别输出 names names2 print(names) print(names2) ``` 看结果会发现,只是把names 列表中的 小黄 改成了 Yellow ,names2 列表中没有变,其实它的原理很简单,如下图 ![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210709162155326.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM4NjgyODYw,size_16,color_FFFFFF,t_70) 首先,names 指向一个列表,然后把 names 复制了一份,赋值给 names2 ,由于 修改的是 第一个 列表的 小黄,所以第二个列表不受影响。 那么现在我改一下这个列表,从names列表中再添加一个列表,如下代码 ```python ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' names = ["小明", "小红", ["张三", "李四", "王五"], "小黑", "小黄", "小白"] # 复制一份列表 names2 = names.copy() # 把李四 改成英文 names[2][1] = "Lisi" print(names) 7 print(names2) ``` 这段代码的运行结果是,两个列表的李四都变成了英文,来分析一下原理 ![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210709162219264.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM4NjgyODYw,size_16,color_FFFFFF,t_70) 其实这个图也挺简单的,就是中间那个列表是单独分配了一块空间,然后从第一层列表中去引用地址,复制的names2 也是引用的地址,所以真实的值一变,两个列表的内部列表的值也就变了。 也就是说 list.copy() 方法只能 copy 一层,这就是所谓的浅复制。 补充:第二个列表copy 第一个列表,实际上第二个列表的每个元素是第一个列表每个元素的引用 **实现浅复制的三种方法** ```python import copy names = ["小明", "小红", "小黑", "小黄", "小白"] # 浅copy 1. names1 = copy.copy(names) # 2. names2 = names[:] # 3. 工厂函数 names3 = list(names) ``` 深复制的方法 ```python import copy names = ["小明", "小红", "小黑", ["粉色"], "小黄", "小白"] # 深复制 deep_names = copy.deepcopy(names) # 修改粉色为 Pink names[3][0] = "Pink" # 分别打印输出两个列表 print(names) print(deep_names) ``` 输出结果为: ```python ['小明', '小红', '小黑', ['Pink'], '小黄', '小白'] ['小明', '小红', '小黑', ['粉色'], '小黄', '小白'] ```

标签:names2,Python,小黄,列表,详解,names,基础教程,print,copy
来源: https://blog.51cto.com/u_14246112/3033717

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有