page contents

Python 中元组、字典、集合的 5 道易错题,90% 的人都栽过!

元组、字典、集合是 Python 中常用的数据类型,但它们的特性藏着不少 “坑”。很多时候,哪怕是有经验的开发者也会因为忽略细节而犯错。今天就来分享 5 道经典易错题,附带详细解析,帮你避开这些 “陷阱”。

attachments-2025-08-K9UnR76E6896a399a395f.jpg元组、字典、集合是 Python 中常用的数据类型,但它们的特性藏着不少 “坑”。很多时候,哪怕是有经验的开发者也会因为忽略细节而犯错。今天就来分享 5 道经典易错题,附带详细解析,帮你避开这些 “陷阱”。

第 1 题:元组的 “不可变” 陷阱

题目:以下代码的输出结果是什么?

t = (1, 2, [3, 4])

t[2].append(5)

print(t)

选项:

A. 报错:'tuple' object does not support item assignment

B. (1, 2, [3, 4, 5])

C. (1, 2, [3, 4])

D. 以上都不对

解析:

正确答案是 B。

很多人认为元组是 “完全不可变” 的,但其实元组的 “不可变” 指的是元素的引用不可变,即不能替换元组中的元素(比如t[2] = [3,4,5]会报错)。但如果元组中的元素是可变对象(如列表),我们可以修改该对象的内部数据(如列表的 append 操作)。

本题中,元组的第三个元素是列表,列表是可变的,所以append(5)会成功执行,元组最终变为(1, 2, [3, 4, 5])。

第 2 题:字典键的 “哈希性” 误区

题目:以下代码会报错吗?如果会,报错原因是什么?

d = {

(1, 2): "a",

[3, 4]: "b"

}

选项:

A. 不报错,正常创建字典

B. 报错,因为元组不能作为字典键

C. 报错,因为列表不能作为字典键

D. 报错,因为字典键必须是字符串

解析:

正确答案是 C。

字典的键必须是可哈希对象(即不可变类型),因为哈希值需要保持稳定才能实现快速查找。

元组是不可变类型(可哈希),所以(1,2)可以作为键;

列表是可变类型(不可哈希),所以[3,4]不能作为键,会直接抛出TypeError: unhashable type: 'list'。

第 3 题:集合的 “自动去重” 与 “无序性”

题目:以下代码的输出结果是什么?

s = {3, 1, 2, 2, 4}

s.add(5)

s.add(3)

print(sorted(s))

选项:

A. [1, 2, 3, 4, 5]

B. [3, 1, 2, 4, 5]

C. [3, 1, 2, 2, 4, 5, 3]

D. 报错

解析:

正确答案是 A。

集合有两个核心特性:

1.唯一性:自动去重,重复添加的元素会被忽略(如2和3重复添加,集合中仍只保留一个);

2无序性:元素没有固定顺序,打印时顺序可能随机。

本题中,集合s最终包含{1,2,3,4,5},sorted(s)会对集合元素排序并返回列表,所以结果是[1,2,3,4,5]。

第 4 题:字典的 “键值覆盖” 问题

题目:以下代码的输出结果是什么?

d = {"name": "张三", "age": 20, "name": "李四"}

print(d["name"])

选项:

A. 张三

B. 李四

C. 报错:duplicate key

D. 张三李四

解析:

正确答案是 B。

字典中不允许重复的键,如果在创建字典时出现重复键,后出现的键值对会覆盖前面的。

本题中,两个"name"键重复,后面的"李四"覆盖了前面的"张三",所以d["name"]返回"李四"。

这个特性在手动写字典时容易因疏忽犯错,比如复制粘贴代码时不小心重复定义键。

第 5 题:元组与列表的 “类型转换” 坑

题目:以下代码的输出结果是什么?

t = (1, 2, 3)

lst = list(t)

lst[0] = 10

print(t)

选项:

A. (10, 2, 3)

B. (1, 2, 3)

C. [10, 2, 3]

D. 报错

解析:

正确答案是 B。

list(t)会将元组转换为列表,但这是创建一个新的列表对象,而非修改原元组。元组本身仍然是不可变的,所以修改列表lst不会影响原元组t。

很多新手会误以为 “转换后修改列表会同步改变元组”,其实两者是完全独立的对象,修改其中一个不会影响另一个。

总结:避坑关键点

1.元组:不可变指 “引用不可变”,但内部的可变元素(如列表)可修改;

2.字典:键必须可哈希(不可变类型),重复键会被后出现的覆盖;

3.集合:自动去重且无序,添加重复元素无效,排序需用sorted()。

这些题目看似简单,却能反映出对数据类型核心特性的理解深度。你做对了几道?欢迎在评论区分享你的答案~ 也别忘了转发给身边正在学 Python 的朋友,一起避坑!

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2025-08-09 09:25
  • 阅读 ( 28 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

2172 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2172 文章
  3. Pack 1335 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章