Search code examples
pythonstringescapingbackslashrepr

Why do backslashes appear twice?


When I create a string containing backslashes, they get duplicated:

>>> my_string = "why\does\it\happen?"
>>> my_string
'why\\does\\it\\happen?'

Why?


Solution

  • What you are seeing is the representation of my_string created by its __repr__() method. If you print it, you can see that you've actually got single backslashes, just as you intended:

    >>> print(my_string)
    why\does\it\happen?
    

    The string below has three characters in it, not four:

    >>> 'a\\b'
    'a\\b'
    >>> len('a\\b')
    3
    

    You can get the standard representation of a string (or any other object) with the repr() built-in function:

    >>> print(repr(my_string))
    'why\\does\\it\\happen?'
    

    Python represents backslashes in strings as \\ because the backslash is an escape character - for instance, \n represents a newline, and \t represents a tab.

    This can sometimes get you into trouble:

    >>> print("this\text\is\not\what\it\seems")
    this    ext\is
    ot\what\it\seems
    

    Because of this, there needs to be a way to tell Python you really want the two characters \n rather than a newline, and you do that by escaping the backslash itself, with another one:

    >>> print("this\\text\is\what\you\\need")
    this\text\is\what\you\need
    

    When Python returns the representation of a string, it plays safe, escaping all backslashes (even if they wouldn't otherwise be part of an escape sequence), and that's what you're seeing. However, the string itself contains only single backslashes.

    More information about Python's string literals can be found at: String and Bytes literals in the Python documentation.