Только один из этих «комментариев» является реальным.
Ну, с технической точки зрения все они являются комментариями, реальная разница между ними заключается в скорости и функциональности.

Давайте сгенерируем некоторый код, чтобы узнать, каковы фактические различия между ними.

Real comments took: 0.08859992027282715
Fake comments took: 1.4969751834869385

Вариант комментария «#» явно предпочтительнее изолированного строкового литерала в этом совершенно нереалистичном сценарии, поэтому, если вы когда-либо хотели включить в свой код 500 000 комментариев, это, безусловно, путь.

Но что здесь происходит на самом деле, и поскольку это Python, можем ли мы каким-то образом злоупотребить этим поведением? Давайте изучим AST наших двух автоматически сгенерированных программ, чтобы выяснить это.

Синтаксическое дерево для реальных комментариев

Module

Синтаксическое дерево для поддельных комментариев

Module
  Expr
    Str
  Expr
    Str
  Expr
    Str
  Expr
    Str
  Expr
    Str
  ...

Как и следовало ожидать, настоящие комментарии просто не включены в окончательный Python AST. Именно здесь имеет место разница в скорости, строковые литералы по-прежнему должны оцениваться во время выполнения программы, и вы никогда не должны злоупотреблять ими для комментариев. Но это не значит, что они бесполезны.

Цитируя PEP-0257:

Строка документации — это строковый литерал, который встречается в качестве первого оператора в определении модуля, функции, класса или метода. Такая строка документации становится специальным атрибутом __doc__ этого объекта.

Python поддерживает не только изолированные строковые литералы, но и по существу поддерживает изолированное все. Что интересно здесь, так это то, что все операторы оцениваются. В сочетании со свойствами это поведение позволяет использовать код, очень похожий на Ruby.

В заключение: Не злоупотребляйте языком (ну, немного не помешает, правда?)