Использование %
это, технически говоря, строка форматирование , а не конкатенация. Это два совершенно * разных мира.
Если вы знаете об интернировании строк, вы должны знать, что нет абсолютно никакой гарантии, что две строки будут занимать ту же память, что и другая. Тот факт, что в вашем примере первые три делают не что иное, как чистое совпадение.
Я не уверен на 100%, как работает форматирование строк, но я знаю, что он не реализован в базовом C так же, как конкатенация, - я думаю, что он работает немного больше по принципу ''.join(sequence)
, что также быстрее чем +
для больших строк - см. этот пост для получения дополнительной информации.
* вроде.