Un ejemplo de uso:
>>> s = 'Hello world'
>>> t = buffer(s, 6, 5)
>>> t
<read-only buffer for 0x10064a4b0, size 5, offset 6 at 0x100634ab0>
>>> print t
world
El búfer en este caso es una subcadena, que comienza en la posición 6 con longitud 5, y no ocupa espacio de almacenamiento adicional: hace referencia a un segmento de la cadena.
Esto no es muy útil para cadenas cortas como esta, pero puede ser necesario cuando se usan grandes cantidades de datos. Este ejemplo usa un mutable bytearray:
>>> s = bytearray(1000000) # a million zeroed bytes
>>> t = buffer(s, 1) # slice cuts off the first byte
>>> s[1] = 5 # set the second element in s
>>> t[0] # which is now also the first element in t!
'\x05'
Esto puede ser muy útil si desea tener más de una vista de los datos y no desea (o no puede) tener varias copias en la memoria.
Tenga en cuenta que bufferha sido reemplazado por el mejor nombrado memoryviewen Python 3, aunque puede usarlo en Python 2.7.
Tenga en cuenta también que no puede implementar una interfaz de búfer para sus propios objetos sin profundizar en la API de C, es decir, no puede hacerlo en Python puro.
s[6:11]tampoco requiere espacio de almacenamiento adicional, ¿estoy equivocado?