[Python-Dev] bytes & bytearray

Ethan Furman ethan at stoneleaf.us
Mon Jan 19 17:36:55 CET 2015


I was checking the documentation [1] to see where to put the new information about bytes and bytearray %-formatting, and
noticed that /every/ operation that could modify a bytearray object in place (e.g. center, capitalize, strip, etc.)
instead returns a new copy.

The section just prior to that [2] does say, "As bytearray objects are mutable, they support the mutable sequence
operations ...".

So it seems that when bytearray is treated as ascii data a new bytearry is returned, and when bytearray is treated as a
container it is modified in place:

New:

  bytearray(b'Chapter Title').center()
  bytearray(b' Chapter Title ').replace(b' ', b'- * - ')

In-place:

  bytearray(b'abc'][1] = ord(b'z')
  bytearray(b'def'] += b'ghi'
  bytearray(b'123'] *= 3

I now have a minor dilemma:  %-formatting is an ascii operation, but it also has an in-place operator (%=) . . . so does
%= modify the bytearray in place just like += and *= do, or does it return a new bytearray just like all the named ascii
operations do?  I do not know which is more surprising: having one of the in-place operators not work in place, or
having an unnamed ascii-operation not return a new copy.

Thoughts?

--
~Ethan~


[1] https://docs.python.org/3/library/stdtypes.html#bytes-and-bytearray-operations
[2] https://docs.python.org/3/library/stdtypes.html#bytearray-objects

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://mail.python.org/pipermail/python-dev/attachments/20150119/9a7be275/attachment.sig>


More information about the Python-Dev mailing list