列表和元组之间有什么区别?

心不动则不痛 提交于 2019-12-14 12:10:23

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

有什么不同?

元组/列表的优点/缺点是什么?


#1楼

列表用于循环,元组用于结构,即"%s %s" %tuple

列表通常是同质的,元组通常是异类的。

列表用于可变长度,元组用于固定长度。


#2楼

list的值可以随时更改,但是元组的值不能更改。

优缺点取决于用途。 如果您拥有从未更改过的数据,则必须使用元组,否则list是最佳选择。


#3楼

有人提到 ,差异主要是语义上的:人们期望元组和列表表示不同的信息。 但这远远超出了指导原则。 有些库实际上根据传递的内容而有所不同。 以NumPy为例(从我要求更多示例的另一篇文章中复制):

>>> import numpy as np
>>> a = np.arange(9).reshape(3,3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> idx = (1,1)
>>> a[idx]
4
>>> idx = [1,1]
>>> a[idx]
array([[3, 4, 5],
       [3, 4, 5]])

关键是,尽管NumPy可能不是标准库的一部分,但它是一个主要的 Python库,在NumPy列表和元组中是完全不同的东西。


#4楼

列表和元组之间的区别

  1. 文字

    someTuple = (1,2) someList = [1,2]
  2. 尺寸

    a = tuple(range(1000)) b = list(range(1000)) a.__sizeof__() # 8024 b.__sizeof__() # 9088

    由于元组操作的大小较小,因此它变得更快一些,但是在您拥有大量元素之前,不必多说。

  3. 允许的操作

    b = [1,2] b[0] = 3 # [3, 2] a = (1,2) a[0] = 3 # Error

    这也意味着您不能删除元素或对元组进行排序。 但是,您可以将新元素添加到列表和元组中,唯一的区别是您将通过添加元素来更改元组的ID

    a = (1,2) b = [1,2] id(a) # 140230916716520 id(b) # 748527696 a += (3,) # (1, 2, 3) b += [3] # [1, 2, 3] id(a) # 140230916878160 id(b) # 748527696
  4. 用法

    由于列表是可变的,因此不能用作字典中的键,而可以使用元组。

    a = (1,2) b = [1,2] c = {a: 1} # OK c = {b: 1} # Error
  5. 可哈希的元组可哈希,而列表则不可。 哈希函数返回对象的哈希值(如果有)。


#5楼

列表是可变的,元组是不可变的。 可变项和不可变项之间的主要区别是,尝试添加项时的内存使用情况。

创建变量时,会将一些固定内存分配给该变量。 如果是列表,则分配的内存将大于实际使用的内存。 例如,如果当前内存分配为100字节,则当您要追加第101个字节时,可能会另外分配100个字节(在这种情况下,总共为200个字节)。

但是,如果您知道不经常添加新元素,则应使用元组。 元组精确分配所需的内存大小,从而节省了内存,尤其是当您使用较大的内存块时。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!