Python中set与frozenset方法和区别详解

  • Post category:Python

Python中set与frozenset方法和区别详解

1. set方法

1.1. 概述

set是Python中的一种集合类型,它是无序的,且不允许有重复的元素。set可以用序列或者可迭代对象创建,也可以通过set()函数创建一个空集合。set中的元素类型必须是可哈希的,例如数字,字符串,元组等不可变类型。

1.2. 创建set

可以通过以下方式创建set:

s = set('hello')
print(s)
# 结果:{'o', 'l', 'h', 'e'}

1.3. 常用方法

set中的常用方法有:

  • add(elem): 添加一个元素到set中;
  • remove(elem): 从set中移除指定的元素;
  • pop(): 随机删除set中的一个元素;
  • copy(): 返回一个set的拷贝;
  • clear(): 移除set中的所有元素;
  • union(other_set): 返回一个包含两个集合中所有元素的新集合;
  • intersection(other_set): 返回一个包含两个集合中共有元素的新集合;
  • difference(other_set): 返回一个包含只出现在第一个集合中的元素的新集合;
  • symmetric_difference(other_set): 返回一个包含不同时出现在两个集合中的元素的新集合。

2. frozenset方法

2.1. 概述

frozenset是Python中的一种集合类型,它是不可变的。因此,不能像set那样对其增删元素操作。frozenset可以用序列或者可迭代对象创建,也可以通过frozenset()函数创建一个空集合。frozenset中的元素类型必须是可哈希的。

2.2. 创建frozenset

可以通过以下方式创建frozenset:

fs = frozenset([1, 2, 3])
print(fs)
# 结果:frozenset({1, 2, 3})

2.3. 常用方法

由于frozenset是不可变的,因此其常用方法只有以下几个:

  • union(other_set): 返回一个包含两个集合中所有元素的新集合;
  • intersection(other_set): 返回一个包含两个集合中共有元素的新集合;
  • difference(other_set): 返回一个包含只出现在第一个集合中的元素的新集合;
  • symmetric_difference(other_set): 返回一个包含不同时出现在两个集合中的元素的新集合。

3. 区别

set和frozenset的区别在于:

  • set是可变的,frozenset是不可变的;
  • set可以直接进行增删元素操作,而frozenset不行;
  • set没有hash值,不能作为另一个集合的元素,而frozenset可以。

以下是一个关于set和frozenset的示例说明:

# 创建set
s = set([1, 2, 3, 4])
print(s)

# 添加元素
s.add(5)
print(s)

# 删除元素
s.remove(3)
print(s)

# 创建frozenset
fs = frozenset([1, 2, 3, 4])
print(fs)

# 将frozenset作为set的元素
s2 = set([fs])
print(s2)

输出结果:

{1, 2, 3, 4}
{1, 2, 3, 4, 5}
{1, 2, 4, 5}
frozenset({1, 2, 3, 4})
{frozenset({1, 2, 3, 4})}

以上示例说明了set和frozenset的基本操作,以及将frozenset作为set的元素。