Beide werden ein Duplikat eines Satzes geben
shallow_copy_of_set = old_set.copy() #Which is more readable.
Der Grund, dass der erste Weg über nicht einen Satz aus einem Satz geben tut, ist, dass die richtige Syntax dafür wäre set([old_set])
. Was nicht funktionieren würde, weil set
s keine Elemente in anderen set
s sein können, weil sie aufgrund ihrer Veränderbarkeit nicht hashbar sind. Dies gilt jedoch nicht für frozenset
s, so z.B. frozenset(frozenset(frozenset([1,2,3]))) == frozenset([1, 2, 3])
.
So gilt die Faustregel für alle Instanz der grundlegenden Datenstrukturen in Python (Listen, dict, Set, frozenset, string) replizieren:
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.
Also, wenn x
ist eine dieser beiden Arten, dann
shallow_copy_of_x = type(x)(x) #Highly unreadable! But economical.
Beachten Sie, dass nur dict
, set
und frozenset
die eingebaute in copy()
Verfahren haben. Es wäre wahrscheinlich eine gute Idee, dass Listen und Strings auch eine copy()
Methode für Einheitlichkeit und Lesbarkeit haben. Aber sie nicht, zumindest in Python 2.7.3, mit dem ich gerade teste.