Python中元组就是不可修改的列表,可以这样说吗?

花半小时把 python 基础学完了,上面的理解对吗?


Python中元组就是不可修改的列表,可以这样说吗?
12 回复
  1. 元组可哈希 - 只有元组可以当作字典的 key
    2. 处理大量数据时,使用元组效率较高

可以这么说,但不够准确。

元组和列表的核心区别确实是可变性:列表可变(可增删改元素),元组不可变(创建后不能修改)。但它们在设计目的和特性上还有重要差异:

  1. 语义不同:元组常用于存储异构数据(如坐标 (x, y)、数据库记录),列表常用于存储同构数据(如一系列数字)。
  2. 性能差异:元组占用内存更小、创建速度更快,适合作为字典的键或集合的元素(因为不可变哈希)。
  3. 方法支持:列表有 append()extend()remove() 等方法,元组只有 count()index() 等不可变相关方法。

示例对比:

# 列表可变
lst = [1, 2, 3]
lst[0] = 99  # 允许
lst.append(4)

# 元组不可变
tup = (1, 2, 3)
tup[0] = 99  # 报错:TypeError

总结:元组是“不可变序列”,但不仅仅是“不可修改的列表”。

不可变容器

其实我也一直是这么理解的,有没有什么更深入的理解。

话说元祖和 frozenset 又有什么区别?

set 和 list 的区别

元组里放列表的话就不可当 key 了,这是我刚看到的

当然。。因为元组里面放了 list 就不能 hash 了啊

“有些 Python 入门教程把元组称为“不可变列表”,然而这并没有完全概括元组的特点。除了用作不可变的列表,它还可以用于没有字段名的记录。” ——《流畅的 Python 》

可以但是不完整



tuple 是有顺序的,,所以可以存多个相同的值,比如(1, 2, 1)
set 是集合,同一个值只能存一个,,所以{1, 2, 1}会自动变成{1, 2}

tuple 可以理解为 可 hashable / 性能更好(依赖于不可变的特性) /不可变 的列表

暂时我的知识库里就这个了。

回到顶部