有什么不一样? 函数
元组/列表的优势/缺点是什么? spa
列表用于循环,元组用于结构,即"%s %s" %tuple
。 code
列表一般是同质的,元组一般是异类的。 对象
列表用于可变长度,元组用于固定长度。 排序
list的值能够随时更改,可是元组的值不能更改。 内存
优缺点取决于用途。 若是您拥有从未更改过的数据,则必须使用元组,不然list是最佳选择。 get
有人提到 ,差别主要是语义上的:人们指望元组和列表表示不一样的信息。 但这远远超出了指导原则。 有些库实际上根据传递的内容而有所不一样。 以NumPy为例(从我要求更多示例的另外一篇文章中复制): io
>>> 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列表和元组中是彻底不一样的东西。 import
列表和元组之间的区别 变量
文字
someTuple = (1,2) someList = [1,2]
尺寸
a = tuple(range(1000)) b = list(range(1000)) a.__sizeof__() # 8024 b.__sizeof__() # 9088
因为元组操做的大小较小,所以它变得更快一些,可是在您拥有大量元素以前,没必要多说。
容许的操做
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
用法
因为列表是可变的,所以不能用做字典中的键,而可使用元组。
a = (1,2) b = [1,2] c = {a: 1} # OK c = {b: 1} # Error
可哈希的元组可哈希,而列表则不可。 哈希函数返回对象的哈希值(若是有)。
列表是可变的,元组是不可变的。 可变项和不可变项之间的主要区别是,尝试添加项时的内存使用状况。
建立变量时,会将一些固定内存分配给该变量。 若是是列表,则分配的内存将大于实际使用的内存。 例如,若是当前内存分配为100字节,则当您要追加第101个字节时,可能会另外分配100个字节(在这种状况下,总共为200个字节)。
可是,若是您知道不常常添加新元素,则应使用元组。 元组精确分配所需的内存大小,从而节省了内存,尤为是当您使用较大的内存块时。