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
- 如何调用dede标签(dedeCMS列表页调用tag的方法小结5.6/5.7)
- python列表精讲33节(Python列表知识应知应会)
- python对列表排序(Python实现对特定列表进行从小到大排序操作示例)
- dede搜索模块下载(dede会员列表调用适用于企业、个人)
- dedecms怎么添加alt标签(dedecms 取消栏目列表页文章标题设置推荐后的加粗)
- 织梦模板修改列表(手把手教你制作织梦自定义公告模板)
- 怎么对python中列表进行排序(Python列表常见操作详解获取,增加,删除,修改,排序等)
- vue实现列表向上滚动更新(vue实现列表无缝滚动)
- dedecms标签分类(dedecms list增加noflag属性的方法 实现让列表标签不调用有推荐属性的文章)
- python列表反转的方法(Python实现的列表排序、反转操作示例)
- jquerycss3轮播案例(CSS3实现列表无限滚动/轮播效果)
- dedecms怎么添加栏目(Dedecms频道,列表页,内容页中调用全站最新文章的方法)
- dedecms首页布局(dedecms实现列表页缩略图随机调用的方法)
- 织梦栏目设置封面显示不正常(织梦列表页分页错位分页显示为竖排的解决方法)
- 如何实现让dede三级栏目数据调用(dede调取三级栏目名及栏目下的内容列表的方法)
- vue左右联动列表(vue+iview的菜单与页签的联动方式)
- 《道德经》:功成不局,泰而不骄(道德经:功成不局)
- 每日一典 过江之鲫(每日一典过江之鲫)
- 红色代表什么(红色代表什么意义和象征)
- 菲律宾安全吗(菲律宾安全吗2023)
- 彩礼重要吗()
- 写信告诉我今天海是什么颜色(写信告诉我今天海是什么颜色回答)
热门推荐
- mysql全表查询如何优化(MySQL 分组查询的优化方法)
- pythonssh登录服务器(对python 通过ssh访问数据库的实例详解)
- python中查看数据类型的内置函数(python学习——内置函数、数据结构、标准库的技巧推荐)
- 云服务器用于什么方面(美国云服务器与哪些因素有关?)
- mysql的简单介绍(MySQL Shell的介绍以及安装)
- Visual Studio代码缩略图
- djangoapi接口开发(Django使用AJAX调用自己写的API接口的方法)
- ASP.NET自定义分页类
- html5能取数据库吗(HTML5 客户端数据库简易使用:IndexedDB)
- 香港云服务器怎么那么火(如何选择便宜稳定的香港云服务器?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9