F. What's the difference between these two set methods?
A. Die Aktualisierungs-Version subtrahiert von einem vorhandenen Set, ändert es und lässt es möglicherweise kleiner als das Ursprüngliche. Die Nicht-Aktualisierungs-Version erzeugt ein neues Set, ohne die Originale zu verändern.
F. Weil difference_update das Set s aktualisiert, welche Vorsichtsmaßnahmen sollten getroffen werden, um ein Ergebnis von None von dieser Methode zu vermeiden?
A. Änderungsmethoden in Python geben im Allgemeinen None zurück, um anzuzeigen, dass sie ein Objekt geändert haben. Die einzige "Vorsichtsmaßnahme" besteht darin, das None-Ergebnis nicht einer Variablen zuzuweisen.
F. In Bezug auf Geschwindigkeit sollte set.difference_update nicht schneller sein, da nur Elemente aus dem Set s entfernt werden und nicht ein neues Set wie bei set.difference() erstellt wird, oder?
A. Ja, der Algorithmus der Aktualisierungs-Version verwirft einfach Werte.
Im Gegensatz dazu hängt der Algorithmus für die nicht-aktualisierende Version von der Größe der Sets ab.
Wenn die Größe von s vier oder mehr Mal größer ist als die von t, kopiert die neue Set-Version zuerst das Hauptset und verwirft dann Werte daraus. Daher wird "s - t
als n = s.copy(); n.difference_update(t)
) umgesetzt. Dieser Algorithmus wird verwendet, wenn s viel größer als t ist.
Andernfalls besteht der Algorithmus für die nicht-aktualisierende Version darin, ein leeres neues Set n zu erstellen, über die Elemente von s zu iterieren und sie zu n hinzuzufügen, wenn sie nicht in t vorhanden sind.