Потому что то, что вы видите, это не строковое представление для строки(простите за тавтологию), а ее "техническое" представление. Попробуйте сделать
>>> print('"Isn\'t," they said.')
Дело в том, что каждый объект в python может иметь 2 метода:
__repr__ и
__str__. Первый отвечает за "техническое" представление, которое помогает однозначно идентифицировать объект и используется для отладки и в том числе в REPL, а второй за строковое представление, удобное для чтения человеком. Например, в случае с
datetime.date(2021, 6, 1),
__repr__ вернет
'datetime.date(2021, 6, 1)', а
__str__:
'2021-06-01'.
UPD: увидел обсуждение в комментариях касательно ' и "
> Почему в вышеуказанном примере бэкслэш выводится, в примере ниже - нет?
>>> "\"Yes,\" they said."
'"Yes," they said.'
Тут штука в том, что двойные кавычки это что-то вроде синтаксического сахара, который позволяет нам вставлять всякие непечатаемые символы, а также использовать переменные(как f-строки или r-строки). В итоге их отображение все равно приводит их к виду одинарных кавычек с соответствующим форматированием. Для одинарных кавычек обратный слеш при работе с двойными не нужен, поэтому он и не отображается.