复制列表:shallow_copy_of_list = old_list[:]

复制字典:shallow_copy_of_dict = dict(old_dict)

但是对于set,我担心类似的事情不起作用,因为说new_set = set(old_set)会给出一组集合?

但这确实有效。因此,我在此处发布问题和答案以供引用。万一其他人有同样的困惑。

最佳答案

这两个都将提供一组副本:

shallow_copy_of_set = set(old_set)

或者:
shallow_copy_of_set = old_set.copy() #Which is more readable.

上方的第一种方法没有给出一组集合的原因是,该语法正确的是set([old_set])。这是行不通的,因为set不能是其他set中的元素,因为它们由于可变而无法散列。但是,对于frozenset而言并非如此,例如frozenset(frozenset(frozenset([1,2,3]))) == frozenset([1, 2, 3])

因此,在Python中复制基本数据结构的任何实例(列表,字典,集合,frozenset,字符串)的经验法则:
a2 = list(a)      #a is a list
b2 = set(b)       #b is a set
c2 = dict(c)      #c is a dict
d2 = frozenset(d) #d is a frozenset
e2 = str(e)       #e is a string
#All of the above give a (shallow) copy.

因此,如果x是这些类型之一,则
shallow_copy_of_x = type(x)(x) #Highly unreadable! But economical.

请注意,只有dictsetfrozenset具有内置的copy()方法。出于一致性和可读性考虑,列表和字符串也具有copy()方法可能是一个好主意。但是它们至少在我正在测试的Python 2.7.3中没有。

关于python - 如何在Python中克隆或复制集合?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23200969/

10-12 22:09