L'unità di allocazione non può essere più piccola di 1 byte. Per una variabile a 1 bit (un valore booleano) devi allocare almeno 8 bit, 7 dei quali non usati.
Una moderna CPU opera su 64 bit (8 byte), alcuni su 32 bit = 4 byte; I controller incorporati a 16 bit sono comuni, i controller a 8 bit sono già rari. La RAM funziona anche in modo più efficiente con larghezze maggiori e normalmente si aspetta l'allineamento sul bordo a 4 byte per recuperi efficienti. Questo è il motivo per cui un valore a 1 bit può anche richiedere 4 byte in memoria.
Un intero Python è un oggetto. Sì, puoi invocare i metodi direttamente su una costante intera: (1).__add__(2)
o (100).bit_length()
. Ciò significa che il valore intero effettivo è memorizzato insieme a molte altre informazioni.
Gli interi in Python cercano di adattarsi alla dimensione dei dati, tanto più in Python 3 era un intero di qualsiasi lunghezza è un oggetto dello stesso tipo, solo allocando abbastanza byte per memorizzare il valore.
Puoi infatti comprimere valori di piccola magnitudine per usare in modo più efficiente i bit disponibili. Questo è comune sono i formati di archiviazione, specialmente dove la larghezza di banda è importante. Per esempio. una GPU può lavorare con trame confezionate in vari modi, sia come numeri interi che come (brevi) caratteri. La maggior parte delle moderne CPU ha "istruzioni vettoriali" per lavorare con diversi interi indipendenti a 16-bit e 8-bit imballati in registri a 32 o 64 bit.