python列表怎么赋值(详解Python列表赋值复制深拷贝及5种浅拷贝)
python列表怎么赋值
详解Python列表赋值复制深拷贝及5种浅拷贝概述
在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢?
列表赋值
|
# 定义一个新列表 l1 = [ 1 , 2 , 3 , 4 , 5 ] # 对l2赋值 l2 = l1 print (l1) l2[ 0 ] = 100 print (l1) |
示例结果:
[1, 2, 3, 4, 5]
[100, 2, 3, 4, 5]
可以看到,更改赋值后的l2后l1同样也会被更改,看似简单的“复制”,在python中,列表属于可变对象,而对可变对象的复制其实就是将列表的内存空间类似c中的指针再次指向新的变量名,而不是诸如字符串这种不可变对象在复制时会创建新的内存空间进行赋值。即此时l1和l2指向的是同一片内存空间,那么怎么实现真正复制呢?
浅拷贝
当列表中的元素为不可变对象时,我们可以用以下方法对列表进行赋值:
|
import copy # 定义一个新列表 l0 = [ 1 , 2 , 3 , 4 , 5 ] print (l0) print ( '-' * 40 ) |
利用切片
|
l1 = l0[:] l1[ 0 ] = 100 print (l0) |
利用模块copy
|
import copy l2 = copy.copy(l0) l2[ 0 ] = 100 print (l0) |
利用list()
|
l3 = list (l0) l3[ 0 ] = 100 print (l0) |
利用列表方法extend
|
l4 = [] l4.extend(l0) l4[ 0 ] = 100 print (l0) |
利用列表推导
|
l5 = [i for i in l0] l5[ 0 ] = 100 print (l0) |
可以看到最终的打印结果都是[1, 2, 3, 4, 5],我们成功进行了列表的复制,但是为了条件需要是列表中元素为不可变对象呢? 因为如果列表中的元素为可变对象,在复制时有会发生对象的引用,而不是新建内存空间进行引用,比如:
|
l0 = [ 1 , 2 , [ 3 ], 4 , 5 ] print (l0) l2 = l0[:] l2[ 2 ][ 0 ] = 100 print (l0) |
示例结果:
[1, 2, [3], 4, 5]
[1, 2, [100], 4, 5]
可以看到,当列表l0中含有可变对象时,对复制后的l1进行改变其中可变对象元素l2[2]时,l0中的可变对象l0[2]也发生了改变,那么怎么实现真正的完全的拷贝呢?
深拷贝
利用copy模块中的deepcopy进行深拷贝:
|
import copy l0 = [ 1 , 2 , [ 3 ], 4 , 5 ] print (l0) l2 = copy.deepcopy(l0) l2[ 2 ][ 0 ] = 100 print (l2) print (l0) |
示例结果:
[1, 2, [100], 4, 5]
[1, 2, [3], 4, 5]
总结
以上所述是小编给大家介绍的详解python列表赋值复制深拷贝及5种浅拷贝,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
原文链接:https://www.jianshu.com/p/049bbf2072a7
- python代码添加微信号(python 获取微信好友列表的方法微信web)
- 怎么对python中列表进行排序(Python列表常见操作详解获取,增加,删除,修改,排序等)
- python如何获取列表值(Python中按键来获取指定的值)
- 织梦栏目怎么管理(织梦“模块管理”里面的“模块列表”显示空白的解决方法)
- dede栏目下有内容却不显示(dedecms列表不显示第一个元素如分隔符的简单方法)
- python元组和列表的定义(Python基本数据结构与用法详解列表、元组、集合、字典)
- dede生成的路径有问题(dede查询列表中单独显示查到了多少条记录)
- python入门知识点总结(深入解析Python小白学习操作列表)
- laravel如何设置默认模块(laravel-admin 中列表筛选方法)
- dedecms独立页面怎么加(DEDECMS实现文章tag关键词自动生成列表页的方法)
- dede调用栏目路径(dede栏目列表首页与第一页链接出现重复的解决办法)
- dedecms标签调用详解(Dedecms待审核文章在列表页显示的方法)
- canvas实现滚动列表(Canvas实现贝赛尔曲线轨迹动画的示例代码)
- pythonfor循环如何遍历嵌套列表(在Python中,不用while和for循环遍历列表的实例)
- 微信小程序映射设置(微信小程序虚拟列表的实现示例)
- dedecms 数据转移(dedecms5.7 通过替换文件升级后 所有档案列表为空的解决方法)
- 《庆余年2》新消息,原班人马,肖战特别出演,这才是最好的安排(庆余年2新消息原班人马)
- 宁夏灵武恐龙化石发现始末(宁夏灵武恐龙化石发现始末)
- 到了岁末 临门一脚 节点,天台综合督评会目标直指 全年红(到了岁末临门一脚)
- 寒假余额不满24小时,不如来一场说走就走的亲子阅读之旅(寒假余额不满24小时)
- 省委书记出席的交流会,十位县委书记同场发言,代表公文材料的高水平(省委书记出席的交流会)
- 《刘老根3》热播,去世15年的她却再次被 伤害(去世15年的她却再次被)
热门推荐
- mysql数据库基本增删改查基本语句(MySQL表的增删改查基础教程)
- mysql中提取日期的函数是什么(MySQL获得当前日期时间函数示例详解)
- windows 2003服务器系统安装(win2003云服务器安装西部数码网站助手教程)
- RegisterClientScriptBlock与RegisterStartupScript区别
- dede织梦的后台如何调整和使用(dedecms织梦模板去掉文档内链自动连接关键词的下划线)
- sqlserver删除表的第一行数据(sql server删除前1000行数据的方法实例)
- C#冒泡排序
- python开启两个线程(Python开启线程,在函数中开线程的实例)
- css3填充式进度条动画(CSS3样式linear-gradient的使用实例)
- mysql server安装图解教程(mysql容器之间的replication配置实例详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9