Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解

概述

在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢?

列表赋值

# 定义一个新列表

l1 = [1, 2, 3, 4, 5]

# 对l2赋值

l2 = l1

print(l1)

l2[0] = 100print(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] = 100print(L0)

利用模块copy

import copyL2 = copy.copy(L0)

L2[0] = 100print(L0)

利用list()

L3 = list(L0)

L3[0] = 100print(L0)

利用列表方法extend

L4 = []

L4.extend(L0)

L4[0] = 100print(L0)

利用列表推导

L5 = [i for i in L0]

L5[0] = 100print(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学习教程

会继续为大家更新!初学Python的小伙伴们也要跟着系统的

Python学习路线

走哦!

python复制列表元素_Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解...相关推荐

  1. awk命令详解_python学习之利用urllib和urllib2访问http的GET/POST详解

    前言 本文主要给大家介绍了关于python如何学习访问http的GET/POST的相关内容,使用urllib和urllib2,可以轻松实现对http的访问,下面话不多说了,来一起看看详细的介绍吧. 示 ...

  2. python 3 字典排序_Python学习教程实用技法:通过公共键对字典列表排序—itemgetter...

    Python学习教程实用技法:通过公共键对字典列表排序-itemgetter 前言:我们有一个字典列表,想根据一个或多个字典中的值对列表进行排序. 利用operator模块中的itemgetter函数 ...

  3. 我学python前一句_Python学习教程:人生苦短,我用Python?入门前你要知道这些

    有多少伙伴是因为一句'人生苦短,我用Python'就要去学Python的?之前也大家更新过Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pytho ...

  4. python资本市场财务数据分析_Python学习教程:用Python进行金融市场文本数据的情感计算...

    今天我们的Python学习教程找点财经类新闻文本数据用Python来做点简单的情感分析. 一.tushare介绍 tushare库是目前比较流行的开源免费的经济数据库,tushare有普通版和高级版, ...

  5. python修改列表元素_python 3 基础之列表和列表添加元素、修改元素、查找元素、删除元素、排序、嵌套、取最值...

    列表(与字符串相似,字符串用引号,而列表用中括号和逗号.引号,列表中可以保存多种数据类型) # 定义一个列表,格式:列表名=[元素1,元素2.元素3.......] 列表使用与字符串的索引编号一致,如 ...

  6. python的dropna函数_Python学习教程:从Excel到Python最常用的32个Pandas函数(一)

    原标题:Python学习教程:从Excel到Python最常用的32个Pandas函数(一) 本次的Python学习教程涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入.数据 ...

  7. python函数isdisjoint方法_Python学习之---Python中的内置函数(方法)(更新中。。。)...

    add(item)#将item添加到s中,如果item已经在s中,则无任何效果 break#退出循环,不会再运行循环中余下的代码 bool()#将参数转换为布尔型 bytes()#将值转成bytes类 ...

  8. python字典的键可以用列表吗_python字典多键值及重复键值的使用方法(详解)

    在Python中使用字典,格式如下: dict={ key1:value1 , key2;value2 ...} 在实际访问字典值时的使用格式如下: dict[key] 多键值 字典的多键值形式如下: ...

  9. python程序运行键_python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

最新文章

  1. 安卓okhttp连接mysql_android中okhttp实现断点上传示例
  2. 实验协作的时候需要做什么?
  3. Django内置的用户认证
  4. Ubuntu 16.04+.Net Core+Docker+Nginx安装部署
  5. jenkins的JAVA简单顺序配置git仓库
  6. Python精通-Python入门基础
  7. 【Flink】Flink 小知识点 Flink 同时 保存 offset 到backend 和 kafka 内置 topic
  8. 《机电传动控制》学习笔记-07
  9. 使用Arduino驱动 ADS1115 ADC采样芯片
  10. 一根竹子,4天的生长过程
  11. 为什么Windows鼠标指针是弯的?
  12. [vue-ts]ts版本问题合集
  13. linux locale字符集设置,Linux下通过locale来设置字符集
  14. 一次大文件上传失败的排查
  15. python送程序员收入_程序员学Python后惊叹,这么丰厚的收入是Java给不了的!
  16. ROS入门-ROS的安装及编写简单的节点talker和listener
  17. 【Neo4j】第 10 章:图嵌入 - 从图到矩阵
  18. c语言结构体编辑学生成绩管理,【C语言】结构体的应用以及学生成绩管理系统的设计...
  19. AutoDesk 3DS Max2010 官方简体中文版
  20. 详解 图像旋转变换 原理

热门文章

  1. cookie记录了服务器相关的信息,使用cookie记录信息(精选).ppt
  2. android 获取wifi的加密类型,wifi加密类型
  3. python里面的import provide_Python importorror:没有名为wmi的模块
  4. AI超人赛车手狂虐人类登Nature封面!1000台PS4训练,「苏菲」极限超车独霸赛道...
  5. 数学对于编程来说重要吗?编程大佬眼里的线性代数
  6. 张弥曼获“世界杰出女科学家奖”,她的贡献在哪你一定要知道!
  7. 三次握手wireshark抓包分析,成功握手和失败握手
  8. 使用Notepad++打造称心的IDE: Python PHP Perl
  9. 表格存储 SQL 查询多元索引
  10. SpringCloud应用在Kubernetes上的最佳实践—开发部署