Python выполняет поэтапное копирование строк: Выполняет ли Python фрагментирование строк по ссылке?
Это то, что должны учитывать все реализации Python, или это просто деталь реализации CPython?
Копирование базовой памяти на срезы str
выбрано потому, что в противном случае подсчет ссылок/сборка мусора усложняется, а сам подсчет ссылок является деталью реализации CPython. Поэтому копирование фрагментов строк также является деталью реализации.
Теоретически копирования можно было бы избежать при реализации без нарушения каких-либо требований: несколько лет назад был предложен патч, пытающийся избежать копирования, но он был отклонен Гвидо из-за проблем с производительностью (ссылка).
Обратите внимание, что некоторые отдельные фрагменты не копируются в CPython. Это также деталь реализации/оптимизация, которая не документирована в справочнике по языку.
Помните ли вы, есть ли предложение или незавершенная разработка по увеличению количества типов (например, list
и tuple
) для поддержки протокола буфера? (Не уверен, что я имею в виду PEP 688.)
(Очевидно, что для списков важно нарезка как копирование, но строки неизменяемы)