python 列表和元组,python中数组和列表的区别
Python中列表和元组的详细区别:1。列表和元组的区别:2。列表:3。元组
Python和tuples的详细区别一、list和tuples的区别list是动态数组,是可变的,长度可以重置(改变其内部元素的个数)。元组是静态数组,它们是不可变的,它们的内部数据一旦创建就不能更改。元组缓存在Python运行时环境中,这意味着我们不需要每次使用元组都访问内核来分配内存。
结籽率的这些差异在设计理念上是不同的:
列表可以用来存储独立对象的多个数据集。元组用于描述事务中不会改变的多个属性。2.列表创建后,我们可以根据自己的需要更改其内容:
L=[1,2,3,4,5,6] L [0]=L [2] * L [3] L [12,2,3,4,5,6]此外,我们可以向列边缘添加新数据以增加其大小:
Len (L) 6 L. Append (7) L [12,2,3,4,5,6,7] Len (L) 7这是因为动态数组支持resize操作,可以增加数组的容量。当数据第一次需要添加到一个大小为N的列表中时,Python会创建一个新的列表,这个列表足够容纳原来的N个元素和附加的元素。但是,实际分配的不是N-1个元素,而是M个元素,M个N,以便为将来的添加预留空间。然后旧列表的数据被复制到新列表,旧列表被销毁。从设计角度来说,第一次添加可能是后续添加的开始。通过保留空间,我们可以减少操作的数量和这个分配空间的内存副本。这是非常重要的,因为内存复制可能非常昂贵,尤其是当列表大小开始增长时。
【外链图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-GDQPX7R-1599024560319)(。/image/添加到列表。jpg)]
3.元组Tuple是固定不变的。这意味着,与列表不同,一旦创建了元组,就不能修改其内容或改变其大小。
T=(1,2,3,4) t [0]=5 traceback(最近一次调用是最后一次):文件“stdin”,第1行,在模块类型中错误:“tuple”对象不支持项赋值。虽然它们不支持改变大小,但是我们可以将两个元组合并成一个新的元组。这个操作类似于列表的resize操作,但是我们不需要为阳光灿烂的夏天的元组分配任何额外的空间:
T1=(1,2,3,4) T2=(5,6,7,8) T1T2 (1,2,3,4,5,6,7,8)如果我们把它和链表的追加操作进行比较,我们会看到它的复杂度是O(n)而不是链表的O(1)。这是因为每增加一个新元素到一个tuple中,都会有分配和复制操作,而不是像list一样只有在多余的空间用完的时候才会有。因此,元组不提供类似追加的自递增操作,任何两个元组的相加总是返回一个新分配的元组。
【外链图像传输失败,源站可能有防盗链机制。建议保存图片直接上传(IMG-NISA GXH8-1599024560321)(。/图像/元组合并操作. jpg)]
这个网站是python Tutor,是一个可以可视化python运行内存的网站,非常适合初学者研究运行过程中内存发生了什么。
元组静态特性的另一个优势是Python后台会发生的事情:资源缓存。
Python是一种垃圾收集语言,这意味着当一个变量不再被使用时,Python会将该变量使用的内存释放回操作系统,供其他程序(变量)使用。但是,对于长度为1~20的元组,即使不在使用中,其空间也不会立即归还给系统,而是留作将来使用。这意味着当未来需要一个相同大小的新元组时,我们不再需要向操作系统申请一块内存来存储数据,因为我们已经有了预留的空间。
这似乎是一个微妙的好处,但实际上这是元组的一个惊人之处:它们可以轻松快速地创建,因为它们可以避免与操作系统频繁打交道,这将需要很长时间。
下面这个例子会很直观的解释问题。
In [1]: %timeit l=[0,1,2,3,4,5,6,7,8,9]93.7 ns每循环3.33 ns(平均标准时间。戴夫。7次运行,每次循环10000000次)In [2]: %timeit t=(0,1,2,3,4,5,6,7,8,9) 18.5ns每次循环1.19ns次运行,每次循环1000000次的平均标准偏差)以上示例显示,初始化列表比初始化元组慢5.1倍。3354如果这是一个循环,则
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。