Python集合类型的不可变性和可哈希性
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中的集合类型具有不可变性和可哈希性,这些特点使得集合类型在处理需要快速判断元素是否存在、去重等场景下非常有用。
相关文章