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?
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
.
Tags und Links python singleton types immutability