Python里的dict和set的背后小秘密

  • Post category:Python

让我给您详细的讲解一下Python里的dict和set的背后小秘密。

Python里的dict和set的背后小秘密

1. Python中的Hash Table(哈希表)

Dict和Set在Python实现上都是基于Hash Table(哈希表)的。Hash Table是一个非常高效的数据结构,它通过将键值映射到数组中的一个位置来实现快速查找。

以Python中的dict为例,当我们执行d[key]时,Python实际上会在内存中计算出key的哈希值,并将其作为数组下标,从而快速定位到key对应的值。

哈希表的一个重要特性是:查找、插入和删除操作都可以在O(1)时间内完成,即它们的时间复杂度都是常数级别的,这使得哈希表成为一种非常高效的数据结构。

2. Dict中的键必须是可哈希的

由于Dict是基于哈希表实现的,所以Dict中的键必须是可哈希的(即不可变的类型)。这是因为哈希表中的键值对是通过键的哈希值来存储和查找的,如果键是可变的类型,则在执行哈希计算时它可能会发生变化,从而导致存储位置的改变,这会破坏哈希表的基本特性,导致查找失败。

以下是一个示例,演示了Dict中的键必须是可哈希的:

# 键必须是可哈希的
d = {}
d[[1, 2, 3]] = 'value'

当我们执行上述代码时,会抛出“TypeError: unhashable type: ‘list’”异常,因为列表是可变的类型,不能作为Dict的键。

3. Set中元素必须是可哈希的

和Dict一样,Set也是基于哈希表实现的,所以Set中的元素也必须是可哈希的。如果我们试图将一个不可哈希的类型添加到Set中,Python会抛出“TypeError: unhashable type”异常。

以下是一个示例,演示了Set中元素必须是可哈希的:

# 元素必须是可哈希的
s = set()
s.add([1, 2, 3])

当我们执行上述代码时,会抛出“TypeError: unhashable type: ‘list’”异常,因为列表是可变的类型,不能作为Set的元素。

4. 结论

在Python中,Dict和Set都是基于哈希表实现的,它们都具有非常高效的查找、插入、删除操作的特性。

但是需要注意的是,Dict中的键和Set中的元素必须是可哈希的,否则会导致程序异常。

以上就是Python里的dict和set的背后小秘密。

希望对您有所帮助,若有不懂之处或疑问,请随时提出,我会在第一时间为您解答。