python——列表和元组性能对比

Python列表与元组:特性对比与性能优化指南 在Python数据结构中,列表(list)和元组(tuple)是最基础的序列类型,理解它们的核心差异对编写高效代码至关重要。从底层原理来看,列表采用动态内存分配支持可变操作,而元组的静态内存分配使其具有更高的访问速度和线程安全性。在性能优化方面,列表适合频繁修改的场景,而元组则因其不可变性成为字典键和配置数据的理想选择。实际开发中,合理运用列表推导式和元组解包等技巧,能显著提升代码执行效率。特别是在处理大数据集合时,列表的内存分配策略和元组的缓存机制都会对程序性能产生关键影响。 阅读详情

创建列表方式

# 创建空列表
# option A
empty_list = list()

# option B
empty_list = []

区别主要在于 list() 是一个 function call,Python 的 function call 会创建 stack,并且进行一系列参数检查的操作,开销较大,反观 [] 是一个内置的 C 函数,可以直接被调用,因此效率高。

列表和元组存储方式的差异

列表和元组最重要的区别就是,列表是动态的、可变的,而元组是静态的、不可变的。这样的差异势必会影响两者存储方式:

list1 = [1, 2, 3]
list1.__sizeof__() # 分配的空间
64
tup1 = (1, 2, 3)
tup1.__sizeof__()
48

可见,对列表和元组,我们放置了相同的元素,但元组的存储空间却比列表要少16字节。

事实上,由于列表是动态的,所以它需要存储指针,来指向对应的元素(上述例子中,对于 int 型,8 字节)。另外,由于列表可变,所以需要额外存储已经分配的长度大小(8 字节),这样才可以实时追踪列表空间的使用情况,当空间不足时,及时分配额外空间。

l = []
l.__sizeof__() # 空列表的存储空间为 40 字节
40
l.append(1)
l.__sizeof__() # 加入了元素 1 之后,列表为其分配了可以存储 4 个元素的空间(72 - 40)/ 8 = 4
72
l.append(2)
l.__sizeof__() # 由于之前分配了空间,所以加入元素 2,列表空间不变
72
l.append([3, 4])
l.__sizeof__()
72
l.append(5)
l.__sizeof__() # 加入元素 5 之后,列表的空间不足,所以又额外分配了可以存储 4 个元素的存储空间
104

为了减小每次增加/删减操作时空间分配的开销, Python每次分配空间时都会额外多分配一些,这样的机制( over- allocating)保证了其操作的高效性:增加/删除的时间复杂度均为 O(1)。

但是对于元组,情况就不同了。元组长度大小固定,元素不可变,所以存储空间固定。

列表和元组的性能

元组要比列表更加轻量级一些,所以总体上来说,元组的性能速度要略优于列表。

另外,Python 会在后台,对静态数据做一些资源缓存(resource caching)。通常来说,因为垃圾回收机制的存在,如果一些变量不被使用了,Python 就会回收它们所占用的内存,返还给操作系统,以便其他变量或其他应用使用。

但是对于一些静态变量,比如元组,如果它不被使用并且占用空间不大时,Python 会暂时缓存这部分内存。这样,下次我们再创建同样大小的元组时,Python 就可以不用再向操作系统发出请求,去寻找内存,而是可以直接分配之前缓存的内存空间,这样就能大大加快程序的运行速度。

下面的例子,是计算初始化一个相同元素的列表和元组分别所需的时间。可以看到,元组的初始化速度,要比列表快 5 倍。

import timeit
t1 = timeit.Timer('x=[1, 2, 3, 4, 5, 6]')
t1.timeit()
0.07322828826904981
t2 = timeit.Timer('x=(1, 2, 3, 4, 5, 6)')
t2.timeit()
0.01978216423486856

如果是索引操作的话,两者的速度差别非常小,几乎可以忽略不计。

t11 = timeit.Timer('y=x[3]', 'x=[1, 2, 3, 4, 5, 6]')
t11.timeit()
0.03726485971640159
t22 = timeit.Timer('y=x[3]', 'x=(1, 2, 3, 4, 5, 6)')
t22.timeit()
0.03577006133559735

列表和元组的使用场景

  1. 如果存储的数据和数量不变,比如你有一个函数,需要返回的是一个地点的经纬度,然后直接传给前端渲染,那么肯定选用元组更合适。
def get_location():
    ......
    return (longitude, latitude)
  1. 如果存储的数据或数量是可变的,比如社交平台上的一个日志功能,是统计一个用户在一周之内看了哪些用户的帖子,那么则用列表更合适。
viewer_owner_id_list = [] # 里面的每个元素记录了这个 viewer 一周内看过的所有 owner 的 id
records = queryDB(viewer_id) # 索引数据库,拿到某个 viewer 一周内的日志
for record in records:
    viewer_owner_id_list.append(record.id)
  1. 元素不需要改变时:
    两三个元素,使用 tuple,元素多一点使用 namedtuple。

  2. 元素需要改变时:
    需要高效随机读取,使用 list。需要关键字高效查找,采用 dict。去重,使用 set。大型数据节省空间,使用标准库 array。大型数据高效操作,使用 numpy.array。

总结

列表和元组都是有序的(可通过下标检索),可以存储任意数据类型的集合,主要有以下区别:

  • 列表是动态的,长度可变,可以随意地增删改元素。列表的存储空间略大于元组,性能略逊于元组。
  • 元组是静态的,长度大小固定,不可以对元组元素进行增删改操作。元组对于列表更加轻量级,性能稍优。
Python 疑问解答:List 和 Tuple 哪个更快?为什么?快多少呢? 然而,当需要频繁地进行元素的添加、删除和修改操作时,List可能更适合。虽然Tuple在上述方面具有优势,但在某些特定情况下,List可能更适合使用。例如,当需要频繁地对元素进行添加、删除或修改操作时,List的可变性使得这些操作更加方便和高效。在Python中,List(列表)和Tuple(元组)是两种常用的数据结构,它们都可以用于存储多个元素。然而,List和Tuple在某些方面有着不同的性能特点。通过上述代码,我们可以测量List和Tuple在元素访问、添加和删除操作上的性能差异。 阅读详情

相关推荐

STM32F103C8T6实战:手把手教你搭建智能火灾报警系统(附MQ-2传感器调试技巧)

本文详细介绍了基于STM32F103C8T6单片机和MQ-2烟雾传感器的智能火灾报警系统搭建过程。从硬件选型、电路设计到软件开发,提供全面的实战指导,特别包含MQ-2传感器调试技巧,帮助开发者快速实现稳定可靠的智能火灾监控系统。

year5的博客 213

python列表与元组的速度比较

列表与元组的速度比较 IPython 中用 magic 命令 %timeit 来计时。 比较生成速度 可以看到,元组的生成速度要比列表的生成速度快得多,相差大概一个数量级。  比较遍历速度 产生内容相同的随机列表和元组: 在遍历上,元组和列表的速度表现差不多。 比较遍历和索引速度: 元组的生成速度会比列表快很多,迭代速度快一点,索引速度差不多...

Fabio的博客 4733

Fiddler everywhere的一些基础操作

网上能搜到的Fiddler everywhere使用教程太少,于是我整理了一些自己实操成功的内容,包括Fiddler everywhere的Mock测试、弱网测试等基础操作,后续还会持续更新。操作系统:macOS使用工具:Fiddler everywhere 5.10.0本文简单介绍了使用Fiddler everywhere进行的Mock测试和弱网测试,而Fiddler everywhere提供了更多的其他实用的功能,我会在后期进行一个持续的学习和更新。

weixin_44346646的博客 2479

Python随笔

目录1、元组与列表的区别参考资料 1、元组与列表的区别 元组和列表都是Python的序列,而且都可以按照特定顺序存放一组元素,类型不收限制,只要是Python支持的类型都可以,它们之间有以下区别: 列表属于可变序列,它的元素可以随时修改或者删除;元组属于不可变序列,其元素不可以修改,除非整体替换; 列表可以使用append()、extend()、insert()、remove()和pop()等方...

然后就去远行 859

Fluent Meshing边界层设置保姆级教程:从y+理论到实战避坑,看完就会

本文详细解析了Fluent Meshing边界层设置的全过程,从y+理论基础到实战避坑技巧,帮助用户精准计算第一层高度并优化参数配置。通过案例演示和常见问题诊断,指导读者掌握边界层网格生成的核心技术,提升CFD模拟精度。特别针对不同湍流模型的y+要求提供具体参数建议。

weixin_30576827的博客 790

Openclaw错误分析与解决方案之:Agent couldn‘t generate a response. Please try again.

Openclaw错误分析与解决方案:Agent couldn't generate a response. Please try again.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1226

列表和元组的区别与总结

这也是为什么元组不可变而列表可变的原因,因为列表储存同质的对象,例如北上广深的人口数,我们可以再加上成都苏州的人口数、或者删掉深圳的人口数也没有问题,但是元组里面一个城市的经纬度删掉一个或者修改一个是没有意义的。一般不再用到的变量所占用的资源会被释放还给操作系统,但是长度为 1-20 的元组即使不再使用了,也不会把它们占用的资源立刻还给操作系统,而是留作未来使用,这样在以后创建同样大小的元组的时候,就不用重新申请内存了。描述当前的经纬度,如果你想记录自己的轨迹,那么可以用列表记录每一秒的。

qq_55858843的博客 776

BGP路由聚合:自动聚合和手动聚合

路由聚合是指将多条具体的路由合并为一条聚合路由,以减少路由表的条目数。这种技术通过只向对等体发送聚合后的路由,而不发送所有的具体路由,来减小路由表的规模。同时,被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

网络技术联盟站 1221

【Python性能分析】Mysql、Pandas、Python列表,三者的查询性能谁强谁弱?

原文地址 这篇笔记测试Mysql、Pandas、Python列表的大数据查询性能。 手中有一张72万余行的数据库表,借此机会测试三者的数据查询性能,终于解决内心疑问。   测试环境:Ubuntu 20.04 LTS, Python 3.8.2, Intel® Core™ i7-8750H CPU @ 2.20GHz × 12 原数据有8列,724100行,sql文件大小 65.5 MB 数据表第8列为时间,下面用三种方法分别按时间降序,记录每种方法的用时(每种方法测试3次,取平均值)

weixin_45063926的博客 1271

2023华为od机试C卷【宽度最小的子矩阵】Python 实现

给定一个矩阵,包含N*M个整数,和一个包含K个整数的数组现在要求在这个矩阵中找一个宽度最小的子矩阵,要求子矩阵包含数组中所有的整数。

MISAYAONE的博客 2186

2025电赛嵌入式:K210教程-如何刷固件 如何烧录代码 全网唯一

本文介绍了K210开发板的固件刷写和开发环境搭建方法。主要内容包括:1)从Sipeed官网下载合适的MaixPy固件,根据需求选择完整版或精简版;2)使用k-flash等工具烧录固件,注意区分亚博和Sipeed开发板的固件版本;3)介绍了擦除闪存的两种模式(部分擦除和完全擦除)及其应用场景;4)搭建CanMV开发环境,通过MaixPy IDE连接开发板并进行程序调试。文章还提供了常见问题的解决方法,如串口驱动安装、固件兼容性检查等,为K210开发提供了完整的入门指南。

FJN110的博客 547

【Python】—— 列表与元组:从基础操作到性能对比

本文详细解析了Python中列表与元组的基础操作、高级特性及性能对比。从创建、访问到嵌套解包,全面介绍两者的使用场景与技巧,帮助开发者根据需求选择合适的数据结构。特别强调了列表的可变性与元组的不可变性在实际项目中的应用差异。

weixin_29029995的博客 578

华为OD机试 - 开源项目热度榜单(Java 2025 C卷 100分)

H = Wwatch X#watch + Wstar X#star +Wfork X#fork +Wissue X#issue +Wmr X#mr H表示热度值,Wwatch、Wstar、Wfork、Wissue、Wmr分别表示5个统计维度的权重,#watch、#star、#fork、#issue、#mr分别表示5个统计维度的统计值。

学Java,找哪吒 1756

为什么Python元组比列表更快?性能对比实测

本文将通过实际测试,从创建时间、内存占用、元素访问速度、迭代速度和作为函数参数传递的效率五个方面,对比元组和列表的性能表现。由于元组是不可变的数据结构,Python在创建元组时可以做一些优化。相比之下,列表是可变的,创建时需要更多的内存分配和初始化操作。我实际测试中发现,平台响应速度快,执行代码很流畅,特别适合做这种需要反复运行比较的性能测试。测试显示,相同元素的元组比列表节省约10%-15%的内存空间。如果你也想亲自验证元组和列表的性能差异,不妨去InsCode上试试,整个过程非常顺畅,结果一目了然。

AgatePanther34的博客 623

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Python列表与元组的内存模型与性能对比

在Python编程中,列表和元组是两种最常用的序列类型,它们的核心差异源于底层内存模型的不同。动态数组结构的列表支持可变操作,通过过度分配策略实现O(1)时间复杂度的append操作;而静态数组结构的元组则因其不可变性,在内存占用和创建速度上具有优势。从技术实现来看,列表的动态扩容机制会带来约12.5%的内存增长,而元组的固定内存布局使其成为字典键和线程安全场景的理想选择。在实际工程应用中,理解这些底层原理能帮助开发者做出更优选择:列表适合频繁修改的场景如日志收集,元组则更适合作为函数返回值或配置常量。特别

weixin_31102231的博客 324

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Python列表与元组:可变性差异、性能对比与选型指南

在Python编程中,列表与元组是两种最基础的数据结构,它们都支持存储序列数据,但可变性这一核心差异决定了它们在内存模型、操作语义和性能表现上截然不同。列表作为动态数组,允许增删改并预留额外内存,适合数据量不确定、需要频繁修改的场景;元组则因不可变特性具备轻量内存、可哈希和安全共享等优势,适合表达固定结构或作为字典键。理解两者底层原理,不仅能帮助开发者避免切片浅拷贝、单元素元组等常见陷阱,还能在高频创建、大数据量存储等场景中做出更优选择。本文从内存分配、内置方法、性能实测到实际项目选型,系统梳理列表与元组的

weixin_32466193的博客 232

Python列表与元组深度解析:从内存布局到性能对比的选型指南

Python数据结构中,列表与元组是两种基础且常用的序列类型。列表作为动态数组,支持任意增删改操作,而元组是不可变的静态数组,内存布局更紧凑。从底层原理看,元组因不可变而具备可哈希性,适合作为字典键或集合元素;列表则依靠预留空间实现灵活扩容,但会带来额外内存开销。在性能对比上,元组创建更快且支持短元组缓存复用,而列表在频繁修改场景下更实用。理解两者的可变性根源、内存分配机制与典型应用场景,能够帮助开发者根据数据是否变更、是否需要哈希等条件做出合理选型,并有效规避浅拷贝、单元素逗号等常见陷阱。本文从底层原理到

weixin_33552698的博客 252

【Python实战进阶】3、Python列表vs元组终极指南:性能对比+实战场景全解析

Python列表和元组终极指南:性能对比与实战场景 本文深入解析Python中列表和元组的核心区别与应用场景。关键点包括: 可变性差异:列表可变(支持增删改),元组不可变(创建后不能修改) 性能优势:元组内存占用更小(比列表少20%),初始化速度快5-10倍 选择策略: 列表适用场景:动态数据集合、需要修改的数据、丰富操作方法需求 元组适用场景:固定数据记录、字典键、函数多返回值、保护数据不被修改 实战建议:数据处理时先用元组保证数据完整性,处理阶段转为列表,最终结果可视需求转回元组 掌握这些差异可显著提升

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1120

Python列表与元组全解析:从创建、切片到性能对比

在Python编程中,列表(list)与元组(tuple)是最常用的两种序列容器,二者都支持索引、切片、拼接等基础操作,但在可变性上存在本质差异。列表作为可变对象,可灵活增删改查,适合动态数据集合;元组一旦创建便不可修改,内存占用更小且可哈希,常用于字典键、函数多返回值等场景。理解切片机制、深浅拷贝陷阱以及内存与性能差异,有助于在数据处理、接口返回等实际工程中做出正确选型。本文从创建方式、常用方法、元组解包到深度对比,系统梳理两者特性,帮助初学者避开常见坑点,建立扎实的Python基础。

weixin_29213655的博客 331

Python列表与元组深度对比:从语义到性能的选型指南

在Python编程中,数据结构的选择直接影响代码的可读性与性能。列表和元组作为最基础的数据容器,其核心差异在于可变性与不可变性,这决定了它们在内存布局、哈希能力及语义表达上的不同。理解这些原理有助于编写更高效的代码。元组因其不可变性,常被用作字典键或记录固定数据,而列表则适合存储可变集合。在数据处理、缓存键构建及配置管理等场景中,合理选择容器类型能显著提升程序质量。本文深入探讨列表与元组的底层机制、操作细节及性能实测,助你掌握按场景选结构的工程实践。

weixin_32612263的博客 46

Python列表与元组终极对比:内存、性能、可哈希性及实战选型指南

Python 内置容器中,列表和元组是最基础也最容易被混淆的数据结构。理解它们的本质差异,是从入门走向工程实践的必经之路。列表作为动态数组,通过预分配内存换取高效追加;元组则定长紧凑,结构固定,天然具备可哈希性。在数据量增长、频繁增删改的场景下,列表凭借灵活修改更占优势;而在字典键、函数返回值、常量配置等需要结构稳定与安全传递的场合,元组是不可替代的选择。sys.getsizeof 和 timeit 实测表明,元组在内存占用与创建性能上通常更优。掌握浅拷贝、嵌套可变对象的影响,以及逗号、生成器表达式等易错点

weixin_30768881的博客 293

Python列表与元组:从切片到性能对比的实战指南

在Python编程中,处理批量数据最基础的容器就是列表和元组。列表如同可变的储物架,支持增删改查和切片操作;元组则是一封封不可变的货箱,凭借安全性与轻量性能,常被用作只读数据载体。理解二者差异,是掌握Python数据处理与性能优化的重要前提。实际开发中,从接口数据清洗、列表去重保序,到切片分页展示、下拉列表选项配置,都离不开对这两种类型的精准选型。通过对比两者的内存占用、访问速度以及可哈希特性,开发者可以避免可变对象共享引发的坑,写出更稳健的代码。本文结合实战场景,系统解析列表与元组的使用技巧、切片细节和性

weixin_42116058的博客 262

Python列表与元组深度对比:创建、切片、性能及选择指南

在Python编程中,数据结构是组织与处理数据的基石,其中序列类型尤其重要。列表和元组作为最常用的两种内置序列,虽然都能存储多个元素,但在可变性、内存布局与适用场景上有着本质差异。列表支持动态增删改查、灵活的切片操作与列表推导式,适合管理长度可变的集合数据;元组则以其不可变性和可哈希特性,成为固定记录、字典复合键及函数多返回值的可靠选择。理解列表的浅拷贝陷阱、append与extend的区别,以及元组单元素创建的逗号细节,能有效避免日常开发中的隐蔽错误。本文从基础语法切入,结合增删改查、切片原理、性能对比等

weixin_31315567的博客 237

Python列表与元组:内存布局、性能对比与实战踩坑全解析

在Python中,列表和元组是最基础也最常用的序列类型,但两者在可变性、内存布局和适用场景上有着本质差异。列表作为动态数组支持增删改,而元组一旦创建便不可变,这种差异带来了哈希能力、线程安全和更轻量的内存占用。掌握列表切片、列表推导式、多维列表排序、两个列表转字典等高频操作,能显著提升数据处理效率。理解元组拆包、命名元组以及不可变性的真正含义,有助于避免可变默认参数、浅拷贝误用等经典陷阱。本文在对比性能特征的基础上,结合实际项目中内存优化与代码可维护性的平衡,给出明确选型建议,帮助开发者在日常编码中做出更合

weixin_30444111的博客 78

Python列表与元组的核心差异及性能对比

在Python编程中,序列类型是最基础的数据结构之一。列表(list)作为可变(mutable)对象支持动态修改,而元组(tuple)作为不可变(immutable)对象则保证数据安全。从底层实现看,列表采用预分配空间策略适合频繁修改场景,元组则因精确内存分配在存储静态数据时更高效。在内存敏感型应用中,元组能减少20%左右的内存占用;在CPU敏感操作中,元组的哈希缓存机制使其作为字典键时性能更优。实际开发中,配置项存储、多线程数据共享等场景推荐使用元组,而动态数据收集、实现栈/队列等场景则更适合列表。合理选

weixin_33393017的博客 171
上一篇: 网络能连接,但是浏览器无法刷新,并显示:ERR_PROXY_CONNECTION_FAILED
下一篇: code::block 新建项目(project)并建立 Sources 和 Headers 子目录
Skr.B
博客等级 码龄8年 1103粉丝 81原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Skr.B

WUHOOO~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值