Как правило, это лучше оплатить счет использования байта на значение, а не немного, и вы можно использовать bytearray
(встроенный, так как 2.6) для этой цели:
a = bytearray(100) # 100 values all initialized to 0/False
# or initially true:
b = bytearray(b'\x01' * 100) # 100 values all initialized to 1/True
# While you'll get 0 and 1 back, True and False can be assigned to it
a[1] = True
b[1] = False
Это, как правило, самый лучший вариант, так как это более эффективно использовать байт адресации в большинстве случаев, если это не приведет данные в пролиться из RAM в файл подкачки.
Если вам действительно нужно место для большого количества флагов, вам нужен сторонний пакет, который оптимизирует получение одного бита за значение, например. bitarray
(расширение C для максимальной скорости, но все еще медленнее, чем bytearray
для многих целей) или bitvector
или bitstring
(Pure Python, чтобы свести к минимуму сложности компиляции, а иногда и предоставлять дополнительные функции более легко, но надежно медленнее, чем bytearray
, если не ограничено памятью).
Возможный дубликат [Как создать массив бит в Python?] (Http://stackoverflow.com/questions/11669178/how-to-create-an-array-of-bits-in-python) – ShadowRanger