Python 基础系列--序列类型【4】

编程学思 2019-05-30 13:39:53 ⋅ 625 阅读

目标

1.序列对象有整体的认识;2.掌握list的常用操作3.掌握tuple的常用操作4.理解深浅拷贝问题

第一部分 序列对象

1. 了解序列对象

Python一切皆对象。

1.序列对象包含str、list、tuple2.序列成员属性:有序,可通过下标访问

先大致预览下列表(list)、元组(tuple)的异同点,后续详细梳理

差异点 列表 元组
表示方法 空列表:[] 
单元素列表:[1]
多元素列表[1, 'a']
空元组:()
单元素元组:(1,)
多元素元组:(1, 'a')
可变性 可变 不可变
可操作性 支持丰富的操作 仅支持序列操作
可哈希性 不可哈希,不能作为字典的关键字 可哈希,可以作为字典的关键字


第二部分 List

Python的列表是一个有序可重复的元素集合,可嵌套、迭代、修改、分片、追加、删除,成员判断。 从数据结构角度看,Python的列表是一个可变长度的顺序存储结构,每一个位置存放的都是对象的指针

比如,对于这个列表 alist = [1, “a”, [11,22], {“k1”:”v1”}],其在内存内的存储方式是这样的:


1. 什么是list?

概念: 逗号分隔的不同的数据项使用方括号括起来即是list; 性质: list元素可变,改变的是原对象

>>> tmpList = [] # 创建一个空列表>>> numList = [1, 2, 3, 4]>>> allList = [1, 'a', [11,22], {'k1':'v1'}]

2. 增删改

以xmind的方式呈现

第三部分 Tuple

类似于list的对象,

类似于list, 相对不可更改

重要的实例

alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]# stop_index 逻辑上要大于 start_index# 正整数stop_index>start_index# 负数:stop_index<start_index & step<0
print(alist[1:8:3])# 全部,正向取值print(alist[:])# 全部,反向取值print(alist[-1:-11:-1])# stop_index > len(list), 不报错print(alist[-1:-12:-1])

类似于list, 相对不可更改

参考:廖雪峰老师博客--使用list和tuple[1]的最后来看一个“可变的”tuple:

>>> t = ('a', 'b', ['A', 'B'])>>> t[2][0] = 'X'>>> t[2][1] = 'Y'>>> t('a', 'b', ['X', 'Y'])

这个tuple定义的时候有3个元素,分别是'a','b'和一个list。不是说tuple一旦定义后就不可变了吗?怎么后来又变了?

别急,我们先看看定义的时候tuple包含的3个元素:


当我们把list的元素'A'和'B'修改为'X'和'Y'后,tuple变为:


表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

绝对不变的元组:必须保证tuple的每一个元素本身也不能变。

第三部分 深浅拷贝

对列表和元组进行拷贝时,默认进行的是 浅拷贝只拷贝成员对象的引用,而不会拷贝引用指向的成员对象本身。借助于 copy模块[2] 的deepcopy方法,可以实现深拷贝

深拷贝:既拷贝成员对象的引用,又会拷贝引用指向的成员对象本身。 浅拷贝:只拷贝成员对象的引用,而不会拷贝引用指向的成员对象本身

值得注意的是,上述说法并不完全正确如果成员对象本身是原子类型的(数值、字符串,或者只包含数值或字符串的元组),那么对该成员不会发生真正的深拷贝,即便执行深拷贝动作,内部也只会进行浅拷贝。

浅拷贝和深拷贝的示意图如下:

关于浅拷贝和深拷贝的实际案例,可以参考 《Python核心编程(第二版)》[3] 中的 『6.20』 一节:『*拷贝Python对象、浅拷贝和深拷贝』。

References

[1] 参考:廖雪峰老师博客--使用list和tuple: https://www.liaoxuefeng.com/wiki/1016959663602400/1017092876846880
[2] copy模块: http://docs.python.org/2/library/copy.html
[3] 《Python核心编程(第二版)》: http://book.douban.com/subject/3112503/
[4] 使用list和tuple: https://www.liaoxuefeng.com/wiki/1016959663602400/1017092876846880
[5] 列表: http://www.liujiangblog.com/course/python/19
[6] Python基础:序列(列表、元组): https://www.cnblogs.com/russellluo/p/3297041.html


---------------END----------------

后续的内容同样精彩

长按关注“IT实战联盟”哦




全部评论: 0

    我有话说:

    Python 基础系列--字符串类型【3】

    字符串是编程必然面临的类型,常用指数之高,不得不先了解下

    Python 3.8.6 发布

    Python 3.8.6 发布了,它是 Python 3.8 的第六个维护版本。 3.8 系列的维护版本将每两个月定期更新一次,3.8.7 计划于 2020 年 11 月中旬发布。 随着维护版本的

    Python 基础系列-- 初识【1】

    人生苦短,我用 Python —— Life is short, you need Python

    Python 基础系列--数字类型【2】

    一步一脚脚印,方能走的更远

    Python ORM框架SQLAlchemy 1.3.20 发布

    SQLAlchemy 1.3.20 发布了。SQLAlchemy 是一个 Python 的 SQL 工具包以及数据库对象映射(ORM)框架。它包含整套企业级持久化模式,专门用于高效和高性能的数据库

    Swagger接口文档工具:Knife4j 2.0.7 发布,细节优化

    Knife4j前身是swagger-bootstrap-ui,是一个为Swagger接口文档赋能的工具 文档:https://doc.xiaominfo.com 效果(旧版):http

    MongoDB系列---数据类型/插入文档(三)

    ;3. 数字;4. 字符串;5. 数据;6. 对象...

    Redis面试整理:Redis几种数据类型的用法和应用场景重新梳理了一下

    1、字符串 1.1 介绍 string 字符串类型是Redis中最为常用和基础的存储类型,是一个由字节组成的序列,他在Redis中是二进制安全的,也可以认为string字符串数据类型能够接收任何格式

    安全攻防系列一 安全基础概念

      该系列记录学习极客时间–安全攻防技能30讲相关内容 安全的本质 安全的本质就是保护数据被合法地使用。 数据:应用最核心的东西;如用户信息、订单信息等等 合法:大到法律法规、业务

    Druid 1.2.4 版本发布,增强 SQL Parser,支持 JDK8 日期类型

    Druid 1.2.4 版本现已发布,这个是一个小的 bug 修复版本,修复了一系列 SQL Parser 的问题,增强对 JDK 8 的支持。 Issues SQL Parser 增强对

    Python数据计算工具 PyMiner v2.1.0 Beta 发布!LGPL协议生效!

    PyMiner 是一个类似MATLAB的,但基于python的GUI数据计算工具,通过集成ipython和工作空间、编辑器、绘图、应用插件开发系统、统计和模型相关内容,用户可以在统一的界面程序中的

    TypeScript 4.2 发布

    TypeScript 4.2 已经发布。TypeScript是一种开源语言,它通过添加静态类型定义在 JavaScript(全球最常用的工具之一)的基础上构建。 主要更新内容 更智能的类型别名保护

    商城系统 DBShop V3.0 Beta 发布

    全新重构,首次亮相。 系统简介 DBShop企业级商城系统,使用PHP语言基于Laminas(Zendframework 3) + Doctrine 2 组合框架开发完成。可定制、多终端、多场景、多

    为什么阿里巴巴不建议 boolean 类型变量用 isXXX?

    背景 平时工作中大家经常使用到boolean以及Boolean类型的数据,前者是基本数据类型,后者是包装类,为什么不推荐使用isXXX来命名呢?到底是用基本类型的数据好呢还是用包装类好呢? 例子

    Pyston v2 发布:比 Python 快 20%

    Pyston v2 已正式发布,Pyston 是 Python 的高度兼容实现,自称比 Python 更快。根据 Pyston 提供的宏基准测试结果,其 v2 版本比目前的 Python 3.8 快

    Pyston 2.1 发布,Python 的高度兼容实现

    Pyston 2.1 发布了。Pyston 是 Python 的高度兼容实现,自称比 Python 更快。根据 Pyston 提供的宏基准测试结果,其 v2 版本比目前的 Python 3

    Micronaut 2.4.0 发布,基于 JVM 的微服务应用框架

    ,Micronaut 2.4.0 正式发布,本次更...