在Python的数据结构王国中,元组(tuple) 和集合(set) 是两种独特的存在:
- 元组:不可变的守护者,提供数据安全
- 集合:高效的去重专家,闪电般的成员检测
元组:数据的"保险箱"
# 元组创建 - 使用小括号
dimensions = (1920, 1080) # 屏幕分辨率
colors = ("红", "绿", "蓝") # 三原色
# 尝试修改元组会引发错误
dimensions[0] = 2560 # TypeError: 'tuple' object does not support item assignment- 不可变特性:一旦创建,内容无法更改
- 安全优势:确保关键数据不被意外修改
- 内存高效:比列表更节省内存资源
- 使用场景:存储常量、配置项、函数多返回值
集合:去重与闪电查询
# 集合创建 - 使用花括号
unique_numbers = {1, 2, 3, 2, 1} # 自动去重 → {1, 2, 3}
vowels = {'a', 'e', 'i', 'o', 'u'} # 元音集合
# 集合操作(可变)
unique_numbers.add(4) # 添加元素
vowels.remove('u') # 删除元素 → {'a', 'e', 'i', 'o'}- 去重专家:自动消除重复元素
- 成员检测:O(1)时间复杂度的查询
- 数学运算:支持并集、交集、差集等操作
- 可变特性:支持增删操作
可变 vs 不可变:内存视角
操作 | 可变序列(列表) | 不可变序列(元组/字符串) |
创建后修改 | 原地修改(内存地址不变) | 创建新对象(内存地址改变) |
内存效率 | 相对较低 | 相对较高 |
线程安全 | 需要同步机制 | 天然线程安全 |
典型代表 | 列表(list), 字典(dict), 集合(set) | 元组(tuple), 字符串(str) |
# 内存地址验证
numbers_list = [1, 2, 3]
print(id(numbers_list)) # 原始地址: 140230480000000
numbers_list.append(4)
print(id(numbers_list)) # 地址不变: 140230480000000
colors_tuple = ('红', '绿', '蓝')
print(id(colors_tuple)) # 原始地址: 140230480111111
new_colors = colors_tuple + ('黄',)
print(id(new_colors)) # 新地址: 140230480222222 