Auf diesem page, sehe ich etwas Interessantes:Ist es immer schneller, String als Schlüssel in einem Diktat zu verwenden?
Hinweis, dass es ein schneller Weg für dicts ist, dass (in der Praxis) nur mit str Tasten beschäftigen; Dies beeinflusst die algorithmische Komplexität nicht, aber es kann die konstanten Faktoren signifikant beeinflussen: wie schnell ein typisches Programm endet.
Also was genau bedeutet es?
Bedeutet es die Verwendung von Zeichenfolge, da der Schlüssel immer schneller ist?
Wenn ja, warum?
Update:
Danke für die Vorschläge über die Optimierung! Aber eigentlich interessiere ich mich mehr für die reine Wahrheit, als ob oder wann wir optimieren sollten.
Update 2:
Vielen Dank für die tolle Antworten, werde ich den Inhalt aus dem von @DaveWebb bereitgestellt link zitieren hier:
" ...
ma_lookup ist zunächst auf die lookdict_string Funktion eingestellt (umbenannt in lookdict_unicode in 3.0), die als Es wird angenommen, dass sowohl die Schlüssel im Wörterbuch als auch der gesuchte Schlüssel Standard-PyStringObject sind. Es ist dann in der Lage, einige Optimierungen vorzunehmen, beispielsweise verschiedene Fehlerprüfungen zu mildern, da der String-zu-String-Vergleich niemals Ausnahmen auslöst. Es gibt auch keine Notwendigkeit für reiche Objektvergleiche, was bedeutet, dass wir den Aufruf von PyObject_RichCompareBool vermeiden und immer _PyString_Eq direkt verwenden.
... "
Auch für die Versuchsnummern, ich glaube, die Größe der Differenz wird noch größer, wenn es keine int-to-String Umwandlung
Ich würde vermuten, dass alles darauf ankommt, wie schnell die '__hash__' Methode eines Schlüsselobjekts ist. Ich nehme an, dass es ziemlich einfach ist, eine Zeichenkette zu hashen, aber ich würde mich sehr dafür interessieren, wie viel Anteil einer Wörterbuchsuche ausgegeben wird. – Wilduck
Ihr Update ändert nichts. Nein, es wird in den meisten Fällen nicht schneller sein, es sei denn, deine Schlüssel waren ursprünglich Zeichenfolgen. –
@Lattyware die verknüpfte Seite scheint eine Erhöhung der Geschwindigkeit * für jede Suche * nicht nur für die Konstruktion zu implizieren. – Wilduck