allbet代理:[Python] list vs tupple

admin 3个月前 (07-04) 科技 38 0

前言

列表(list)和 元组(tupple) 是 Python 中常见的两种数据结构.这两者使用方式有一定的相似,俩者都是 Python 内置类型,都可以保留数据聚集,都可以保留复合数据,我们同样可以通过索引去接见它们.

那么问题来了,俩者事实有区别吗???

list 和 tupple 的区别

首先回覆问题.list 和 tupple 有区别吗?谜底是一定的,两者有区别. list 和 tupple 的本质区别在于,前者是一个可变工具而后者是一个不可变工具。

什么是可变工具和不可变工具呢?简朴地来说,可变工具就是建立之后可以修改,而不可变工具则是建立之后不允许在修改。

没关系,让我们看一下例子

首先建立一个 list

>>> a = ["a","b","c","d"]

接着我们试着修改一下上面的 list , 将 b 改成 e,看看会发生什么

>>> a[1] = "e"
>>> a
['a', 'e', 'c', 'd']

似乎什么都没有发生~~

没关系,我们再来建立一个 tupple

>>> b=("a","b","c","d")

同样地,让我们将 tupple 中的 b 改成 e

>>> b[1]="2"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

为什么同样的赋值操作,在 tupple 中会泛起错误呢?缘故原由就是我们上面说到的 tupple 是不可变工具,建立之后不能修改

有个小伙伴看见了

然后给我写了一段下面的代码

>>> b=("a","b","c","d")
>>> b=("a","e","c","d")
>>>b
>>>("a","e","c","d")

这样子是不是做到了修改 tupple 中的第2个元素呢?谜底是否认的,为什么呢?别着急往下看

可变工具和不可变工具

在最先下面的内容之前,需要切记一句话,Python 中的变量是对在内存中 Python 工具的引用

以我们上面的列表 a 为例

>>> a = ["a","b","c","d"]

它在内存中现实显示如下图

若是需要获取列表 list 在内存的现实位置,我们可以借用内置函数 id()

>>> a=["a","b","c","d"]
>>> id(a)
4557552456

现在我们去修改一下 a[1] 的值,然后再用 id() 这个函数去获取 a 在内存的地址,你会发现它的值没有改变,仍然指向相同位置

>>> a[1] = "e"
>>> id(a)
4557552456

整个历程如下图

allbet代理:[Python] list vs tupple 第1张

接下来我们看一下对 tupple 举行同样的操作会有什么转变

>>> a=("a","b","c","d")
>>> id(a)
4557412296
>>> a=("a","e","c","d")
>>> id(a)
4557586504

不难发现,再修改之后指向内存中的地址发生了改变,这意味着这个时刻变量 a 指向了一个全新的工具。

若是以为难以明白,没有关系,看下面的图

allbet代理:[Python] list vs tupple 第2张

这个时刻若是没有其它变量指向之前的 tupple,Python 的 GC 将会把旧的 tupple 从内存中完全删除.

为什么需要 list 和 tupple ?

实在更贴切的应该问,为什么需要可变工具和不可变工具呢?

  1. 添加元素效率

从上面的内容,我们知道一旦建立了 tupple,这个时刻任何修改操作都会去建立新的工具,然后变量重新指向新的工具,假设添加的元素足够多,其效率可想而知。这里的添加是指如下的操作( tupple 自己没有添加的方式)

a = ()
for i in range(num):
    a = a + (i,)
  1. debugger 难度

在之前的 [直接赋值,深拷贝和浅拷贝] 中提到可变工具,修改赋值后的变量,会对原有的变量造成影响,会导致其 value 值的改变,在现实开发历程中很容易被忽略

>>> a = [1, 3, 5, 7]
>>> b = a
>>> b[0] = -10
>>> a
[-10, 3, 5, 7]

什么时刻去使用 tupple 和 list

总结一下,list 和 tupple 的使用场景

  1. tupple 不存在添加和删除的操作,更不存在修改的操作,若是有这些需求,不用使用 tupple,去用 list
  2. 若是只是遍历的话, tupple 的速率是比 list 要快的
  3. 若是你有些数据是需要写保护,不希望在运行历程中被修改的话,用 tupple
  4. tupple 可以用来做 dict 的 key 的,准确的说,所有不可变工具都可以,而 list 不可以

参考

https://learnbatta.com/blog/why-tuple-is-faster-than-list-in-python-22/

https://www.afternerd.com/blog/difference-between-list-tuple/

https://www.programiz.com/python-programming/list-vs-tuples

,

联博以太坊高度

www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。

dafa888体育声明:该文看法仅代表作者自己,与本平台无关。转载请注明:allbet代理:[Python] list vs tupple

网友评论

  • (*)

最新评论

文章归档

站点信息

  • 文章总数:688
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1163
  • 评论总数:282
  • 浏览总数:15626