'Initialize a new L{AmpBox}.
In Python 3, keyword arguments MUST be Unicode/native strings whereas
in Python 2 they could be either byte strings or Unicode strings.
However, all keys of an L{AmpBox} MUST be byte strings, or possible to
transparently coerce into byte strings (i.e. Python 2).
In Python 3, therefore, native string keys are coerced to byte strings
by encoding as ASCII. This can result in C{UnicodeEncodeError} being
raised.
@param args: See C{dict}, but all keys and values should be C{bytes}.
On Python 3, native strings may be used as keys provided they
contain only ASCII characters.
@param kw: See C{dict}, but all keys and values should be C{bytes}.
On Python 3, native strings may be used as keys provided they
contain only ASCII characters.
@raise UnicodeEncodeError: When a native string key cannot be coerced
to an ASCII byte string (Python 3 only).'

def __init__(self, *args, **kw):

    super(AmpBox, self).__init__(*args, **kw)
    if _PY3:
        nonByteNames = [n for n in self if (not isinstance(n, bytes))]
        for nonByteName in nonByteNames:
            byteName = nonByteName.encode('ascii')
            self[byteName] = self.pop(nonByteName)
