揭示 Python 对字典键类型的限制
据观察,Python 中的字典接受多种数据类型作为键,包括无、元组和模块。但是,包含列表的列表和元组明显被排除在外。
限制背后的基本原理
无法使用列表作为字典键源于称为散列性的基本属性。可哈希对象拥有一个恒定的哈希值,可以唯一地标识它们,无论对其内容进行任何修改。此功能对于高效的字典操作(例如键查找和删除)至关重要。
另一方面,列表缺乏此属性。修改列表会改变其内容,从而改变其哈希值。这将导致字典中的行为不一致,因为键预计会随着时间的推移保持稳定。
为什么使用内存位置作为哈希会失败
按照建议,使用列表的内存位置作为其哈希值无法解决问题。这种方法意味着通过身份来比较键,这对于列表也是行不通的。考虑以下场景:
d = {} l1 = [1, 2] d[l1] = 'foo' l2 = [1, 2] # A new list with the same content as l1 d[l2] = 'bar'
在这种情况下,人们会期望 l1 和 l2 都是字典中的有效键。但是,由于 l1 和 l2 是不同的对象,因此使用内存位置作为哈希会导致不同的键值,从而阻止检索“bar”。
含义和替代方案
这个限制对于 Python 中的数据结构设计具有重要意义。如果像元组这样的不可变数据类型不适合,开发人员必须求助于自定义数据类型或解决方法,将类似列表的结构表示为字典键。
总而言之,Python 中无法使用列表作为字典键的根源在于需要可散列性和避免不一致的密钥行为。了解这一限制对于 Python 应用程序中高效可靠的数据管理至关重要。
以上是为什么列表不能成为 Python 字典中的键?的详细内容。更多信息请关注PHP中文网其他相关文章!