"Byte" type?

John Nagle nagle at animats.com
Sun Feb 15 13:09:09 EST 2009

Benjamin Kaplan wrote:
> On Sun, Feb 15, 2009 at 11:57 AM, John Nagle <nagle at animats.com> wrote:
>> Benjamin Peterson wrote:

> Because b'x' is NOT a bytearray. It is a bytes object. When you actually use
> a bytearray, it behaves like you expect.
>>>> type(b'x')
> <class 'bytes'>
>>>> type(bytearray(b'x'))
> <class 'bytearray'>
>>>> ba = bytearray(b'abc')
>>>> ba[0] + ba[1]
> 195

    That's indeed how Python 2.6 works.  But that's not how
PEP 3137 says it's supposed to work.


  "I propose the following type names at the Python level:

         * bytes is an immutable array of bytes (PyString)
         * bytearray is a mutable array of bytes (PyBytes)"


"Indexing bytes and bytearray returns small ints (like the bytes type in
3.0a1, and like lists or array.array('B'))."
(Not true in Python 2.6 - indexing a "bytes" object returns a "bytes"
object with length 1.)

"b1 + b2: concatenation. With mixed bytes/bytearray operands, the return type is 
that of the first argument (this seems arbitrary until you consider how += works)."
(Not true in Python 2.6 - concatenation returns a bytearray in both cases.)

Is this a bug, a feature, a documentation error, or bad design?

				John Nagle

More information about the Python-list mailing list