Python: Standardvergleich

8

In Python 2.7 definiere ich eine leere neue Stilklasse:

%Vor%

Erstellen Sie dann eine Liste der Instanzen der neuen Klasse:

%Vor%

versuchen Sie dann, die Liste zu sortieren:

%Vor%

Überraschend ist, dass sich die Sorte nicht beklagen kann, obwohl ich keine Möglichkeit zum Vergleich von Instanzen von C definiert habe:

%Vor%

Was genau passiert dort und Was ist der Grund für dieses - wohl überraschende - Verhalten?

    
NPE 06.06.2011, 13:31
quelle

3 Antworten

14

Ich denke, das einzige Grundprinzip ist, dass es bequem ist, dass Objekte sortiert werden können und z. verwendet als Wörterbuchschlüssel mit einigen Standardverhalten. Das relevante Kapitel in der Sprachdefinition ist hier: Ссылка

"Die Entscheidung, ob ein Objekt kleiner oder größer als ein anderes Objekt ist, wird willkürlich, aber konsistent innerhalb einer Ausführung eines Programms getroffen."

Daher ist die Tatsache, dass Objekte derzeit unter Verwendung der Speicheradresse verglichen werden, nur ein Implementierungsdetail, auf das nicht gezählt werden kann. Die einzige Garantie besteht darin, dass die Reihenfolge während der Ausführung konsistent bleibt.

    
shang 06.06.2011, 13:45
quelle
1

Ich bin mir nicht ganz sicher, aber vielleicht kann mich das jemand korrigieren.

Wenn Sie Objekte vergleichen, vergleicht sie ihre Speicheradresse, denken Sie daran, 2 C-Strings in C zu vergleichen. Wenn Sie sich das ansehen, sortierte die Sortierung die Objekte von der niedrigsten Speicheradresse bis zur höchsten Speicheradresse (oder Zeigerposition) / p>     

Pwnna 06.06.2011 13:34
quelle
0

Sehen Sie sich die Werte beim Drucken an. Beachten Sie die Hex-Zahl neben dem "Objekt C at"? Das ist eine Zeigerreferenz. Es kann grob mit der Erstellungsreihenfolge gleichgesetzt werden. Wenn Sie diese Liste durchlaufen, sehen Sie, dass sie die Objekte als Standard sortiert hat.

Als Randnotiz erinnere ich mich daran, von Python verwirrt zu sein 2.x Vergleiche ... aber ich weiß nicht, ob das insbesondere in Py3k behoben wurde.

    
cwallenpoole 06.06.2011 13:33
quelle

Tags und Links