Python集合类型的不可变性和可哈希性

2023-03-21 00:00:00 集合 类型 变性

Python中的集合类型(set)具有不可变性和可哈希性。

1、不可变性
集合类型是不可变的,即集合类型的元素不能被修改。一旦集合类型被创建,就不能再进行添加、删除、修改等操作。如果需要修改集合类型,可以先将集合类型转换成可变的集合类型(如列表),进行修改后再转换回来。

my_set = frozenset("pidancode.com")
print(my_set)  # frozenset({'.', 'd', 'o', 'p', 'm', 'n', 'i', 'a', 'e', 'c'})

# my_set.add("z")  # TypeError: 'frozenset' object has no attribute 'add'

my_list = list(my_set)
my_list.append("z")
my_set = frozenset(my_list)
print(my_set)  # frozenset({'c', 'p', 'i', 'o', 'm', 'n', 'd', '.', 'a', 'z', 'e'})

在这个例子中,我们首先创建了一个不可变的集合类型frozenset,然后尝试添加元素,发现会抛出TypeError异常。接着我们将frozenset转换成了一个可变的列表类型,进行了添加操作,最后再将列表类型转换回来,重新得到了一个不可变的集合类型。

2、可哈希性
集合类型是可哈希的,即集合类型可以作为字典类型的键。集合类型的哈希值是根据其中的元素来计算的,不同的集合类型对象的哈希值可能不同。

my_set1 = set("pidancode.com")
my_set2 = set("pidancode")

my_dict = {my_set1: "pidancode.com set", my_set2: "pidancode set"}

print(my_dict)  # {frozenset({'p', 'n', 'd', '.', 'a', 'o', 'c', 'm', 'i', 'e'}): 'pidancode.com set', frozenset({'p', 'n', 'd', 'a', 'o', 'c', 'i', 'e'}): 'pidancode set'}

在这个例子中,我们创建了两个集合类型对象my_set1和my_set2,它们包含的元素不同。然后将它们作为字典类型的键,将它们对应的字符串作为值。最后输出字典类型,可以看到集合类型作为键被正确地存储在了字典中。

综上所述,Python中的集合类型具有不可变性和可哈希性,这些特点使得集合类型在处理需要快速判断元素是否存在、去重等场景下非常有用。

相关文章