python dict key详解

A Dictionary Key must be like a permanent ID card. If the ID card can change its name or numbers, Python will lose track of where your data is stored."


1. The "Rock" vs. "Clay" Analogy

Explanation:

  • Immutable (Rocks): Things like Strings, Integers, and Tuples. Once you create them, you cannot change them. They are solid like rocks.
  • Mutable (Clay): Things like Lists. You can add, remove, or change items inside a list. It's like a piece of clay you can reshape.

中文解释:

  • 不可变(石头): 比如字符串、数字和元组。一旦创建就不能改了,像石头一样硬。
  • 可变(橡皮泥): 比如列表。你可以增加、删除或修改里面的元素,像橡皮泥一样可以变形。

2. Example: Why Strings and Numbers work (Success)

Strings and numbers are Immutable. They never change their value.

python 复制代码
# --- EXAMPLE 1: Using Strings and Numbers ---

# This works perfectly because "Alice" will always be "Alice"
student_scores = {
    "Alice": 95, 
    "Bob": 88,
    101: "Room A"  # Numbers are also immutable
}

print(student_scores["Alice"]) # Python finds it easily!

# Explanation: 
# "Alice" is a string. You cannot change "Alice" into "Alicia" 
# without creating a whole new string. It is safe as a Key.

中文解释: 字符串和数字是"不可变"的。因为 "Alice" 永远是 "Alice",不会突然变成别的东西,所以 Python 能轻松通过这个 Key 找到对应的值。


3. Example: Why Lists fail (The Error)

Lists are Mutable. Because they can change, Python refuses to use them as Keys.

python 复制代码
# --- EXAMPLE 2: Trying to use a List (This will CRASH) ---

# Imagine we want to use a list of coordinates as a key
try:
    my_list = [1, 2]
    treasure_map = {my_list: "Golden Statue"}
except TypeError as e:
    print(f"Error: {e}")

# Explanation: 
# If Python allowed this, and you did: my_list.append(3)
# The key would change from [1, 2] to [1, 2, 3].
# Now Python wouldn't know where the "Golden Statue" is!
# That's why Python gives a "TypeError: unhashable type: 'list'".

中文解释: 列表是"可变的"。如果你把列表 [1, 2] 当做 Key,万一你后面执行了 append(3),Key 就变样了。Python 会觉得这太不安全了,所以直接报错,不让你这么干。


4. Example: Using Tuples (The "Frozen List")

Since the child is about to learn Tuples , this is a great time to show that a Tuple is just an Immutable version of a List.

python 复制代码
# --- EXAMPLE 3: Using a Tuple (The Solution) ---

# A Tuple uses () instead of []
# It is IMMUTABLE (cannot be changed after creation)
point = (1, 2)

locations = {
    point: "Home",
    (5, 10): "School"
}

print(locations[(1, 2)]) # This works!

# Explanation:
# Because you CANNOT add or change items in a Tuple, 
# it is "solid" enough to be a Dictionary Key.

中文解释: 元组(Tuple)使用圆括号 ()。它就像一个"被冻住"的列表,一旦写好就不能改了。因为它是"不可变"的,所以它是安全的,可以作为字典的 Key。


Summary Table for the Student

Data Type Mutable? (Can change?) Can be a Dict Key?
String ❌ No (Immutable) ✅ Yes
Integer ❌ No (Immutable) ✅ Yes
Tuple ❌ No (Immutable) ✅ Yes
List ✅ Yes (Mutable) ❌ No

You can tell the student:

"Python is very organized. It only wants keys that it can trust to stay the same forever. If a key can change (like a List), Python says: 'Nope, too messy!'"

相关推荐
默_笙20 小时前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
qq_4260039621 小时前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫21 小时前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技21 小时前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读21 小时前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时1 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
奇思妙想聪明勤奋的小羊1 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1231 天前
2026年第38周GitHub趋势周报
python·科技·github
IZero071 天前
Jev 与 Laya
python·语言模型