[Python-ideas] anyone need a frozenset or bytearray literal?

Serhiy Storchaka storchaka at gmail.com
Thu Jul 12 03:37:57 EDT 2018


12.07.18 08:33, Gregory P. Smith пише:
> Agreed, bytearray(b'...') should be way less common.  I don't 
> immediately have a use for that beyond merely than disliking the copy 
> from temporary bytes object and gc behind the scenes.

You can't avoid this since bytearray is mutable. The constant bytes 
argument can be shared, but the content of a new bytearray needs to be 
copied.

a = b'abc'
b = bytearray(b'abc')  # should make a copy
c = bytearray(b'abc')  # should make a copy
b[0] = 0
assert c[0] == 97

Although there is a possibility to apply in bytearray the same 
optimization as was made in BytesIO. The bytearray object can use an 
internal mutable bytes object for storing a content instead of a raw 
array. The constructor can save a reference to the passed bytes object, 
this is O(1) operation. bytes(bytearray) could just return a reference 
to that bytes object, it is O(1) too. Any mutating operation should 
check the refcount and make a copy if it is not 1. This will complicate 
the code, and I'm not sure if it is worth.



More information about the Python-ideas mailing list