2015-05-09 14 views
5

Was ist der Unterschied zwischen bytearray und zum Beispiel list oder tuple?Unterschied zwischen Bytearray und Liste

Wie der Name schon sagt, muss bytearray eine array sein, die byte Objekte trägt.
In Python, scheint es, dass bytes und str gleich

>>> bytes 
<type 'str'> 

So behandelt werden, was ist der Unterschied?
Auch, wenn Sie ein bytearray drucken, ist das Ergebnis ziemlich seltsam

>>> v = bytearray([200, 201]) 
>>> print v 
ÈÉ 

Es scheint, dass es die ganze Zahl in chr(integer) verwandelt, das richtig ist? Was nützt ein bytearray dann?

+1

Markieren Sie bitte Ihre Python-Version, da 'str' sich stark zwischen Python 2 und Python 3 unterscheidet. – dhke

+0

Gut bemerkt! Es ist 'Python-2.7' – RafaelC

+0

Siehe hier https://StackOverflow.com/Questions/9099145/Where-are-Python-Bytearrays-used – dhke

Antwort

9

Sie sind in irgendeiner Weise richtig: In Python 2 ist bytes auch mit dem str Typ. Dies liegt daran, dass ursprünglich kein Objekt bytes vorhanden war, sondern nur str und unicode (wobei letzteres für Unicode-Zeichenfolgen steht, d. H. Multibyte-Fähigkeiten aufweist). Als Python 3 kam, änderten sie die ganzen String-Dinge und machten Unicode zum Standardtyp Python 3 str, und sie fügten bytes als den Typ für rohe Bytefolgen hinzu (so dass sie dem Objekt str von Python 2 entsprachen). So

während in Python 3 Sie unterscheiden zwischen str und bytes, die entsprechenden Typen in Python 2 sind unicode und str.

Was macht den bytearray Typ interessant ist, dass es veränderbar ist. Alle obigen String- und Byte-Sequenzen sind unveränderlich, sodass Sie bei jeder Änderung ein neues Objekt erstellen. Aber Sie können bytearray Objekte ändern, was sie für verschiedene Zwecke interessant macht, wo Sie einzelne Bytes in einer Sequenz ändern müssen.

+1

Die andere Sache, die' Bytearray' interessant macht (im Vergleich zu Python 'str', nicht so viel im Vergleich zu Pythons "Bytes" ist, dass es ein wenig mehrdeutig ist, was es ist ein Array von. In Python 2 sind Bytes manchmal Zeichen und manchmal kleine Zahlen. Wenn '= Bytearray ([97,98,99])', gibt 'repr (b)' Ihnen 'Bytearray (b'abc ')'. Aber 'b [0]' gibt dir '97'. Dies kann verwirrend sein, wenn Sie daran gewöhnt sind, das "str" ​​zu verbergen, und Sie dazu zwingt, 'ord' und' chr' zu nennen ('' abc '[0] 'ist'' a'', nicht 97). – abarnert

Verwandte Themen