-
-
Notifications
You must be signed in to change notification settings - Fork 33.1k
Open
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-featureA feature request or enhancementA feature request or enhancement
Description
Feature or enhancement
Proposal:
Update bytearray
to have its internal buffer always be a PyBytesObject
and add a new method, .take_bytes([n])
which extracts that buffer.
.take_byes([n])
adds a way to go from a "mutable" buffer of bytes to an immutable one without requiring a memcpy.
This creates a path to resolve gh-60107
When would I use this?
Any code which makes a ba = bytearray()
, modifies it, then calls bytes(ba)
. Other common patterns are bytes(ba); ba.clear()
or bytes(ba[:n]); del ba[:n]
. Note that if you want to discard data past a point, the most efficient pattern becomes ba.resize(n); ba.take_bytes()
so that take_bytes([n])
doesn’t need to keep around the soon to be discarded extra bytes.
Has this already been discussed elsewhere?
I have already discussed this feature proposal on Discourse
Links to previous discussion of this feature:
Linked PRs
msmojtabafar
Metadata
Metadata
Assignees
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-featureA feature request or enhancementA feature request or enhancement