Python PEP 3137 eingeführt bytearray
als ein veränderbarer 8-Bit-Array-Typ. Ein list
des unveränderlichen Typs bytes
erfüllt jedoch das gleiche Ziel und hat tatsächlich betterperformance, wenn auch vielleicht eine klügere Syntax. Dieser neue Typ widerspricht der Zen of PythonWiderspricht 'Bytearray' nicht dem Zen von Python?
Es sollte eine - und vorzugsweise nur eine - offensichtliche Möglichkeit geben, dies zu tun.
Also meine Frage ist: Gibt es eine dokumentierte große Vorteil oder Designbetrachtung für eine bytearray
über einen list
von bytes
mit?
Bisher habe ich keine Motivation in der PEP oder in den Dokumentationsseiten dokumentiert gefunden. In der Tat, behandelt die Dokumentation, sie als nahezu gleich:
Der bytearray Typ ist ein veränderliches Folge von ganzen Zahlen im Bereich von 0 < = x < 256. meisten der üblichen Methoden der wandelbaren Sequenzen hat ...
und dann
Liste und bytearray Objekte unterstützen zusätzliche Operationen, die an Ort und Stelle Modifikation des Objekts ermöglichen. Andere änderbare Sequenztypen (wenn sie der Sprache hinzugefügt werden) sollten diese Operationen ebenfalls unterstützen.
Als bytearray
s statisch typisiert werden (als 8-Bit-Integer ohne Vorzeichen) könnte man eine Leistungssteigerung zu erwarten, aber wie oben erwähnt der inversen ist wohl wahr. Es sollte auch keinen Speichervorteil für eine bytearray
über eine list
von bytes
geben. Ich könnte mir vorstellen, dass ein veränderbarer Typ itertools.chain
erforderlich ist, aber dies wird nirgends erwähnt und scheint nicht das Designziel zu sein.
Ein Bytearray kann Dinge tun, die eine Liste nicht kann –
Wenn Sie über die Leistung besorgt sind, sollten Sie wahrscheinlich NumPy verwenden. – kindall
Auch ich finde das zweifelhaft: "Außerdem sollte es keinen Speichervorteil für ein Bytearray über eine Liste von Bytes geben." Eine 'liste' wird eine Referenz (4 oder 8 Bytes, abhängig von der Plattform) zu jedem 'Bytes'-Wert enthalten, der an anderer Stelle gespeichert wird. Ein Bytearray wird genau 1 Byte pro Wert verwenden. Dies sollte zu einer erheblichen Speicherersparnis führen. – kindall