Sind Python Empty Immutables Singletons?

8

Sind Python Empty Immutables Singletons?

Wenn Sie die CPython-Implementierung von integrierten Typen überprüfen, finden Sie Kommentare zu allen unveränderlichen integrierten Objekten, deren leere Versionen Singletons sind. Dies wäre sehr sinnvoll, da Python vermeiden könnte, Speicher auf redundante Elemente zu verschwenden, die sich niemals an Ort und Stelle ändern würden.

Hier ist speziell die Quelle für 2.6, die auf frozensets verweist. Es erklärt sich als Kommentar:

%Vor%

Ich finde den gleichen Kommentar auch in CPython 2.5. Ich denke, es ist sinnvoll, zusätzlich zur Dokumentation auf die Quelle zu verweisen, weil CPython die Referenzimplementierung von Python ist.

Ich benutze Python 2.6.5, und ich bekomme das folgende Ergebnis in meinem Interpreter:

%Vor%

Bedeutet dies, dass der Kommentar falsch ist? Ist das ein Fehler in 2.6.5? Ist dies in späteren Versionen von Python garantiert? Wenn ja, kann ich in der Dokumentation keinen Hinweis darauf finden.

Ich frage das, weil ich einen Scheck brauche, der mit der Mitgliedschaft in (None, '') identisch ist, aber der Grund ist eine andere Geschichte.

Ist es deshalb die beste Vorgehensweise, is zu verwenden, um nach None zu suchen und == oder Pythons semantische Falschheit von leeren Typen für Kontrollfluss in Bezug auf andere Typen zu verwenden?

Zusammenfassend:

Sind Pythons leere Immutables jemals garantiert Singletons?

    
Aaron Hall 12.08.2014, 20:07
quelle

1 Antwort

10

Die Beschreibung der Standardtypen gibt keine Zusicherung, dass äquivalente Objekte identisch sind, außer für True , False , None , NotImplemented und Ellipsis . Einige der Versprechen, die es nicht macht, sind () is () , noch 1 is 1 , noch 'hello' is 'hello' . (In der Tat, die Dokumentation ausdrücklich bestreitet die Anforderung 1 is 1 im letzten Absatz von 3.1.)

Nein, Pythons leere unveränderliche Container sind nicht garantiert Singletons * . Die einzigen garantierten Singletons sind True , False , None , NotImplemented und Ellipsis .


* Hinweis: Das Wort " singleton " wird in diesem Zusammenhang nicht in seiner allgemein akzeptierten Bedeutung verwendet. In diesem Post bedeutet Singleton einen Wert, der nur von einem Objekt gehalten werden kann; Daraus folgt, dass jedes Objekt, das diesen Wert enthält, identisch ist.     
Robᵩ 12.08.2014, 20:22
quelle