列表(list)和元组(tuple)的一些基础

list和tuple都是一个可以放置任意数据类型的有序集合,都是既可以存放数字、字符串、对象等

list和tuple都支持负索引

In [8]: nums[-2]
Out[8]: 'ad'
In [9]: tp[-2]
Out[9]: '33'

list和tuple都支持切片操作

In [10]: nums[1:3]
Out[10]: [3, 'ad']
In [11]: tp[1:3]
Out[11]: (3, '33')

list和tuple都可以随意嵌套

In [12]: nums = [[1,2,3],['s','ff'],['34',3,5]]
In [13]: tp = ((23,4,'f'),45,'d',('dd',4,'ff'))

list和tuple的一些区别

  • 列表是动态的,长度大小不固定,可以随意的增加、删除、修改元素
  • 元组是静态的,长度在初始化的时候就已经确定不能更改,更无法增加、删除、修改元素

从图中看出我们对list做出修改是成功的,但是对tuple修改的时候,确抛出了错误,那如果想对tuple做出改变该如何做呢?只能重新开辟一块内存,重新生成新到的tuple了。

从tuple的源码中也可以看出,只有两个自带的方法,一个是统计元素出现的次数一个是查询元素的索引。

list和tuple存储方式的差异

我们先来看个例子

In [19]: nums=['a',1,2]
In [20]: tp=('a',1,2)
In [21]: nums.__sizeof__()
Out[21]: 64
In [22]: tp.__sizeof__()
Out[22]: 48

这里构造了一个list和一个tuple。他们存储的内容是相同的,__sizeof__方法可以打印系统分配空间的大小。可以看到他们所占用的内存空间是不同的,存储的内容相同,但是list比tuple多占用了16自己的内存。

先来看一下一个数组的内存分配过程:

In [23]: l=[]

In [24]: l.__sizeof__()  // 空列表分配了40字节的内存
Out[24]: 40 In [25]: l.append('a') // 增加了一个一个元素后,给列表分配了72字节的内存,一个字符8个字节
// 那就是一次性分配了4个字符的内存空间 In [26]: l.__sizeof__()
Out[26]: 72 In [27]: l.append('b') // 再增加字符,占用内存不变 In [28]: l.__sizeof__()
Out[28]: 72 In [29]: l.append('c') // 再增加字符,占用内存不变 In [30]: l.__sizeof__()
Out[30]: 72 In [31]: l.append('d') // 再增加字符,占用内存不变 In [32]: l.__sizeof__()
Out[32]: 72 In [33]: l.append('e') // 再添加元素,内存不够,触发重新的内存分配 In [34]: l.__sizeof__()
Out[34]: 104

可以看出list为了能够实时追踪内存的使用情况,当空间不足时以及分配额外空间,额外的多分配了内存,而且还需要存储指针,指向对应的元素。

我们可以看到,为了减小每次增加 / 删减操作时空间分配的开销,Python 每次分配空间时都会额外多分配一些,这样的机制(over-allocating)保证了其操作的高效性:增加 / 删除的时间复杂度均为 O(1)。但是对于元组,情况就不同了。元组长度大小固定,元素不可变,所以存储空间固定。

所以说在存储大量的数据的时候,这种差异是需要考虑的,如果数据发生变更的可能性不大,就用元组存储,如果数据是需要频繁的进行数据的修改增加,就使用列表

欢迎大家去 我的博客 瞅瞅,里面有更多关于测试实战的内容哦!!

python中的列表和元组都有哪些区别的更多相关文章

  1. Python中的列表,元组,字符串之间的相互转化

    Python中的列表元组和字符串之间的相互转化需要利用,tuple(),list(),str(). 示例如下: >>> the_string = "hello I'am x ...

  2. python中的列表和元组

    1. 什么是列表 定义: 能装对象的对象 在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求,列表存在索引和切片. 和字符串是一样的. 2.相关的增删改查操作 切片 列表和 ...

  3. Python中的列表、元组、字典、字符串及切片操作

    我们引入一个新的概念:数据结构 数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字或字符,甚至可以是其他数据结构,在python中,最基本的数据结构是序列,序列中的每个元素匾被分 ...

  4. python中的列表、元组、数组——是不是特别容易混淆啊??

    列表: 1. 即list, 是python内置的数据类型.  它的形式是: a = [1, 2, 3, 4, 5] 2. 列表内的值是可以改变的:  即可以这样子: a[0] = 100,  把列表的 ...

  5. python中遍历列表字典元组

    遍历列表,打印:我叫name,今年age岁,家住dizhi,电话phone lt = [ {'name':'小王', 'age':18, 'info':[('phone', '123'), ('diz ...

  6. 谈谈Python中列表、元组和数组的区别和骚操作

    一.列表(List) 1.列表的特点 列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔.如 L = [1,2,3], 列表a有3个成员. 列表是可变的数据类型[可进行增删改查],列表中可以包 ...

  7. 第三章 Python容器:列表、元组、字典与集合

      数据结构的分类依据?基本的"数组"在python中是列表, 数据结构的作用?容器,盛放数据,是由原子组成的分子.可以将一群数据进行整合.拆分.重排. 3.2 列表 列表是啥?顺 ...

  8. [python01] python列表,元组对比Erlang的区别总结

    数据结构是通过某种方式组织在一起的数据元素的集合,这些数据元素可以是数字,字符,甚至可以是其他的数据结构. python最基本的数据结构是sequence(序列):6种内建的序列:列表,元组,字符串, ...

  9. Python数据结构:列表、元组和字典

    在Python中有三种内建的数据结构——列表list.元组tuple和字典dict 列表中的项目包括在方括号中,项目之间用逗号分割 元组和列表十分类似,只不过元组和字符串一样是不可变的 即你不能修改元 ...

随机推荐

  1. 什么是data:image/png;base64,?一道关于Data URI Scheme的入门级CTF_Web题

    一道关于Data URI Scheme的入门级CTF_Web题 0x00 题目描述 这是偶尔遇到的某网安交流群的入群题,题目没有任何的提示,直接给了一个txt文件. 0x01 解题过程 通过给的这个文 ...

  2. AspNetCore源码解析_1_CORS中间件

    概述 什么是跨域 在前后端分离开发方式中,跨域是我们经常会遇到的问题.所谓的跨域,就是处于安全考虑,A域名向B域名发出Ajax请求,浏览器会拒绝,抛出类似下图的错误. JSONP JSONP不是标准跨 ...

  3. Java并发编程学习前期知识下篇

    Java并发编程学习前期知识下篇 通过上一篇<Java并发编程学习前期知识上篇>我们知道了在Java并发中的可见性是什么?volatile的定义以及JMM的定义.我们先来看看几个大厂真实的 ...

  4. Java多线程并发07——锁在Java中的实现

    上一篇文章中,我们已经介绍过了各种锁,让各位对锁有了一定的了解.接下来将为各位介绍锁在Java中的实现.关注我的公众号「Java面典」了解更多 Java 相关知识点. 在 Java 中主要通过使用sy ...

  5. 在d盘创建文件夹,里面有aaa.txt/bbb.txt/ccc.txt,然后遍历出aaa文件夹下的文件(新手)

    //导入的包.import java.io.File;import java.io.IOException;//创建的一个类.public class zy { //公共静态的主方法. public ...

  6. Python基础 | 数据文件的读写

    目录 txt txt的读入 txt的写出 csv xls\xlsx 在线网页数据 常用的工具 爬虫的步骤 pdf pdfrw PyPDF2 提取文档信息 word文档 其他统计软件生成文件 本文总结使 ...

  7. [组件封装]微信小程序-图片批量上传照片墙

    描述 批量上传图片, 可设置最大上传个数, 可删除, 可设置默认值. 效果 源码 pictures-wall.wxml <view class="picturesWall"& ...

  8. python关于字典如何格式化地写入文件之中

    1.python关于字典如何式化地写入文件之中 如何写入:https://blog.csdn.net/qq_15642411/article/details/79943741 (推荐使用json包) ...

  9. JDK_API关于时间的表达

    判断日期是否是闰年 给定格式格式化 第二种表示时间的 Date        java.util         类 Date 表示特定的瞬间,精确到毫秒. 构造方法            Date( ...

  10. 为什么Mysql的常用引擎都默认使用B+树作为索引?

    一.前言 为了讲清楚这个问题,我们要先了解什么是索引. 我记得刚刚学习数据库的时候,老师喜欢用书本的目录来类比数据库的索引,并告诉我们索引能够像目录一样,让我们更快地找到想要找到的数据. 如果是第一次 ...