In both cases, the advantages of the new syntax are brevity, some
small efficiency gain, and the detection of encoding errors at compile
time rather than at runtime. The brevity benefit is especially felt
when using the string-like methods of bytes objects:

The proposed syntax provides a cleaner migration path from Python 2.x
to Python 3000 for most code involving 8-bit strings. Preserving the
old 8-bit meaning of a string literal is usually as simple as adding a
b prefix. The one exception is Python 2.x strings containing
bytes >127, which must be rewritten using escape sequences.
Transcoding a source file from one encoding to another, and fixing up
the encoding declaration, should preserve the meaning of the program.
Python 2.x non-Unicode strings violate this principle; Python 3000
bytes literals shouldn't.

A string literal with a b in the prefix is always a syntax error
in Python 2.5, so this syntax can be introduced in Python 2.6, along
with the bytes type.

A bytes literal produces a new object each time it is evaluated, like
list displays and unlike string literals. This is necessary because
bytes literals, like lists and unlike strings, are
mutable [4].