Array stores homogeneous numeric elements using a declared machine representation rather than a list of arbitrary object references.
Python array: fixed-width numeric storage is not a portable wire encoding
Operation contract
The quantity buffer uses an unsigned-byte array so accepted values fit a known one-byte range. A memoryview edits the shared buffer, demonstrating that zero-copy access retains an alias. Appending an out-of-range value raises without extending the array. Releasing the view permits later buffer resizing; resizing while the view is exported is rejected.
Failure and ownership boundary
Other array type codes can have platform-dependent item sizes and native byte order. The tobytes method does not establish a portable network format without an explicit representation contract. Unsigned bytes still need domain validation if zero or 255 is invalid business input. Python memoryview: shared buffers and explicit release and Python strings and bytes: reject decoding errors before parsing records are separate concerns.
Working program
from array import array
quantities = array("B", [3, 5, 8])
view = memoryview(quantities)
view[1] = 7
print("shared values:", quantities.tolist())
try:
quantities.append(256)
except OverflowError:
print("out of range rejected")
try:
quantities.append(9)
except BufferError:
print("resize while exported rejected")
view.release()
quantities.append(9)
print("released values:", quantities.tolist())Output
shared values: [3, 7, 8]
out of range rejected
resize while exported rejected
released values: [3, 7, 8, 9]Costs and limits
The byte array retains one byte per element plus container overhead. Appending has allocation-dependent cost; converting to a list allocates object references and does not preserve the compact representation. No measured cross-platform memory ratio is claimed.
Common Mistakes
- An exported view shares updates and can prevent resizing.
- Native numeric storage is not automatically an interoperable byte format.
Connected lessons
Python memoryview: shared buffers and explicit release, NumPy slices and indexed copies: verify who owns the buffer, Python JSON validation: reject duplicate members and non-integer amounts.
