在Python中,字典的键(key)必须是不可变的类型,而值(value)可以是任意数据类型。以下是具体说明:
一、键必须是不可变类型
- 不可变类型的定义
Python中不可变类型包括整数(int)、浮点数(float)、字符串(str)和元组(tuple)等。这些类型一旦创建,其内容无法被修改。
- 不可变性的必要性
字典通过键的哈希值(hash value)来快速查找值。如果键是可变的(如列表),其哈希值可能随内容变化而变化,导致字典无法正确索引。例如,向列表中添加元素会改变其哈希值,使原有键失效。
二、值可以是任意类型
字典的值没有类型限制,可以是整数、字符串、列表、字典等任何可存储的Python对象。
三、其他相关说明
- 元组的特殊性
元组是不可变的,因此可以用作字典键。但列表不可变,不能直接作为键。
- 不可变对象的操作
-
切片操作 :对不可变对象(如字符串、元组)进行切片会返回新对象,原对象不变。
-
修改操作 :尝试修改不可变对象会引发错误(如
TypeError
)。
- 字典键的唯一性
字典要求键唯一,若尝试添加重复键,后一个值会覆盖前一个值。
四、错误示例
错误:列表作为字典键
my_dict = {[1, 2]: 'a', [1, 2]: 'b'} # 会抛出 TypeError
正确:使用元组作为键
my_dict = {(1, 2): 'a', (3, 4): 'b'} # 正常运行