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)
- php 获取证书列表(用PHP做了一个领取优惠券活动的示例代码)
- python列表切片和分片(Python列表切片操作实例总结)
- dede模板栏目调用(织梦DEDECMS5.7栏目列表页分页URL优化列表页重复的解决方案)
- vueelementui侧边栏(Vue Element UI自定义描述列表组件)
- dede裁剪插件(DEDE在图集列表中调出图集的所有图片)
- dedecms添加板块(织梦DedeCMS后台文件列表按文件名排序的方法简介)
- dedecms优化关键词(DedeCMS栏目列表推荐文章加粗效果去除方法)
- dede栏目下有内容却不显示(dedecms列表不显示第一个元素如分隔符的简单方法)
- pythondatetime库详解(python使用time、datetime返回工作日列表实例代码)
- dedecms列表样式修改(dedecms5.7sp1评论添加字段的实现方法)
- python中的冒号怎么看(python 列表中[ ]中冒号‘:’的作用)
- 织梦cms指定栏目怎么取(织梦CMS后台模板列表按字母排序方法)
- dedecms怎么添加alt标签(dedecms 取消栏目列表页文章标题设置推荐后的加粗)
- python列表中的数组(Python3.4学习笔记之列表、数组操作示例)
- 小程序推荐ui库(AmazeUI 列表的实现示例)
- 东南亚有哪个国家(东南亚有哪个国家最发达)
- 东南亚安全吗(好不好挣钱)
- 潘长江小品《照亮全家福》台词剧本完整版(潘长江小品照亮全家福台词剧本完整版)
- 一窗通办政务服务小品剧本(一窗通办政务服务小品剧本)
- 刘韬涛丁子贺小品《根治低头族》台词剧本(刘韬涛丁子贺小品根治低头族台词剧本)
- 看完《夺冠》,黄渤的演技我实在夸不起来,彭昱畅反令人惊喜(黄渤的演技我实在夸不起来)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9