首页 > 解决方案 > 是否可以合并两个集合,以便对这两个集合的所有引用都引用新的?

问题描述

在 Python 中,假设我有两个集合 A 和 B,以及对这两个集合的多个引用。

有没有办法合并两个集合 A 和 B 使得对这两个集合的所有引用都将引用新合并的集合?如果可能,运行时会是什么?

A = {1,3}
B = {2,4}
aRef1 = A
aRef2 = A
bRef1 = B
bRef2 = B
MergeSets(A,B)
# Now, whenever I use any of (A, B, aRef1, aRef2, bRef1, bRef2) 
# they refer to the same set which will be {1,2,3,4} 

谢谢

编辑:

有些人一直在问我为什么要这样做,下面是我的一个回复的副本/粘贴:

所以我知道我可以做 A.update(B),将 B 合并到 A 中,但是我必须遍历所有对 B 的引用并将它们设置为引用 A。我在问这样我可以避免这些额外的迭代. 我可以提供更多上下文来为我的特定场景提供一种新方法,但我更想知道这在 python 中是否可能作为一般情况。

此外,看来我的问题已经得到解答,结论是这是不可能的。再次感谢大家:)

标签: pythonpython-3.x

解决方案


根据您所做的分配,他们目前在引用他们各自的集合A或。B例如在以下情况下bRef1

id(B)
# 112140097128

id(bRef1)
# 112140097128

是否通过修改新集合来修改原始集合的事实set取决于您执行的操作类型。如果您执行就地操作,例如:

bRef1 |= {5}

并检查原始变量B,您可以看到它确实已更新:

print(B)
# {2, 4, 5}

尽管当您合并两个集合时,除非您还执行就地操作并因此显式更新两个集合之一,否则您将创建一个新对象:

new_set = aRef2 | bRef2

id(new_set)
# 112140098248

但是,如果您就地更新其中一个集合AB通过将其与另一个合并,假设您已经开始使用2不同的对象,则无法将其更改为引用同一对象的所有集合。


推荐阅读