Python - 复制 Set



Python 复制集

Python 中的复制集是指创建一个包含与现有集相同元素的新集(set)。与创建对原始集的引用的简单变量赋值不同,复制可确保对复制的集所做的更改不会影响原始集,反之亦然。

在 Python 中复制集合有不同的方法,包括使用 copy() 方法、set() 函数或集合推导。

使用 copy() 方法复制集

set 类中的 copy() 方法用于创建 set 对象的浅表副本。

浅表复制意味着该方法创建新的集合对象,但不创建原始集合中包含的对象的副本。相反,它会复制对这些对象的引用。

因此,如果原始集合包含可变对象(如列表、字典或其他集合),则对这些对象的修改将同时反映在原始集合和复制的集合中。

语法

以下是 copy() 方法的语法 -


 set.copy()

返回值

copy() 方法返回一个新集合,它是现有集合的浅表副本。

在下面的示例中,我们将创建集合 “lang1” 的副本并将其存储在 “lang2” 中,然后使用 id() 检索这两个集合及其内存地址。

向 “lang1” 添加元素后,我们再次检索两个集合及其内存地址,以表明 “lang1” 和 “lang2” 是独立的副本 -


lang1 = {"C", "C++", "Java", "Python"}
print ("lang1: ", lang1, "id(lang1): ", id(lang1))
lang2 = lang1.copy()
print ("lang2: ", lang2, "id(lang2): ", id(lang2))
lang1.add("PHP")
print ("After updating lang1")
print ("lang1: ", lang1, "id(lang1): ", id(lang1))
print ("lang2: ", lang2, "id(lang2): ", id(lang2))

输出

这将产生以下输出 -

lang1: {'Python', 'Java', 'C', 'C++'} id(lang1): 2451578196864
lang2: {'Python', 'Java', 'C', 'C++'} id(lang2): 2451578197312
After updating lang1
lang1: {'Python', 'C', 'C++', 'PHP', 'Java'} id(lang1): 2451578196864
lang2: {'Python', 'Java', 'C', 'C++'} id(lang2): 2451578197312

使用 set() 函数复制集

Python set() 函数用于创建新的 set 对象。它将一个可迭代对象作为参数并将其转换为一个集合,从而删除过程中的任何重复元素。如果未提供任何参数,则创建一个空集。

我们可以使用 set() 函数复制集合,方法是将原始集合作为参数传递给 set() 构造函数。这将创建一个包含原始集的所有元素的新集,从而确保对新集的任何修改都不会影响原始集。

在此示例中,我们使用 set() 函数创建 “original_set” 的副本并将其存储在 “copied_set” 中 -


# Original set
original_set = {1, 2, 3, 4}
# Copying the set using the set() function
copied_set = set(original_set)
print("copied set:", copied_set)	

# Demonstrating that the sets are independent
copied_set.add(5)
print("copied set:",copied_set) 	 	 	
print("original set:",original_set) 		

输出

以下是上述代码的输出 -

copied set: {1, 2, 3, 4}
copied set: {1, 2, 3, 4, 5}
original set: {1, 2, 3, 4}

使用 Set Comprehension 复制集

集合理解是在 Python 中创建集合的一种简洁方法。它用于通过迭代可迭代对象并选择性地将条件应用于 filter 元素来生成新集。语法类似于列表推导式,但使用大括号 {} 而不是方括号 [] −


 {expression for item in iterable if condition}

我们可以使用集合理解来复制集合,方法是迭代原始集合的元素并直接使用这些元素创建一个新集合。

在下面的示例中,我们创建了一个名为 “original_set” 的原始集,然后使用集合推导式将其复制到 “copied_set” −


# Original set
original_set = {1, 2, 3, 4, 5}

# Copying the set using set comprehension
copied_set = {x for x in original_set}
print("Copied set:", copied_set)

输出

上述代码的输出如下所示 -

Copied set: {1, 2, 3, 4, 5}