def __init__(self, *args, **kw):
        """
        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).
        """
        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)

        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).
        
stackoverflow/venv/lib/python3.6/site-packages/twisted/protocols/amp.py