码迷,mamicode.com
首页 > 编程语言 > 详细

Python 列表浅复制详解

时间:2017-07-26 14:45:33      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:介绍   数据类型   用法   没有   blog   英文   地址   原理   image   

在文章《Python 数据类型》里边介绍了列表的用法,其中列表有个 copy() 方法,意思是复制一个相同的列表。例如

1 names = ["小明", "小红", "小黑", "小黄", "小白"]
2 # 把 names 复制,赋值给 names2 变量
3 names2 = names.copy()
4 # 分别输出 names names2
5 print(names)
6 print(names2)

这时会发现结果是一样的,那么问题来了,我要把 names 列表中的 小黄改成英文 Yellow,那么 names2 的小黄会发生变化吗?些一段代码看看

1 names = ["小明", "小红", "小黑", "小黄", "小白"]
2 # 把 names 复制,赋值给 names 变量
3 names2 = names.copy()
4 # 修改 names 列表中的 小黄
5 names[3] = "Yellow"
6 # 分别输出 names names2
7 print(names)
8 print(names2)

看结果会发现,只是把names 列表中的 小黄 改成了 Yellow ,names2 列表中没有变,其实它的原理很简单,如下图

技术分享

首先,names 指向一个列表,然后把 names 复制了一份,赋值给 names2 ,由于 修改的是 第一个 列表的 小黄,所以第二个列表不受影响。

那么现在我改一下这个列表,从names列表中再添加一个列表,如下代码

1 names = ["小明", "小红", ["张三", "李四", "王五"], "小黑", "小黄", "小白"]
2 # 复制一份列表
3 names2 = names.copy()
4 # 把李四 改成英文
5 names[2][1] = "Lisi"
6 print(names)
7 print(names2)

这段代码的运行结果是,两个列表的李四都变成了英文,来分析一下原理

技术分享

其实这个图也挺简单的,就是中间那个列表是单独分配了一块空间,然后从第一层列表中去引用地址,复制的names2 也是引用的地址,所以真实的值一变,两个列表的内部列表的值也就变了。

也就是说 list.copy() 方法只能 copy 一层,这就是所谓的浅复制。

 

Python 列表浅复制详解

标签:介绍   数据类型   用法   没有   blog   英文   地址   原理   image   

原文地址:http://www.cnblogs.com/blaomao/p/7239203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!