Является ли копирование строки деталью реализации CPython или частью спецификации?

Python выполняет поэтапное копирование строк: Выполняет ли Python фрагментирование строк по ссылке?

Это то, что должны учитывать все реализации Python, или это просто деталь реализации CPython?

(Очевидно, что для списков важно нарезка как копирование, но строки неизменяемы)

Kaia 30.08.2024 19:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
1
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Копирование базовой памяти на срезы str выбрано потому, что в противном случае подсчет ссылок/сборка мусора усложняется, а сам подсчет ссылок является деталью реализации CPython. Поэтому копирование фрагментов строк также является деталью реализации.

Теоретически копирования можно было бы избежать при реализации без нарушения каких-либо требований: несколько лет назад был предложен патч, пытающийся избежать копирования, но он был отклонен Гвидо из-за проблем с производительностью (ссылка).

Обратите внимание, что некоторые отдельные фрагменты не копируются в CPython. Это также деталь реализации/оптимизация, которая не документирована в справочнике по языку.

Помните ли вы, есть ли предложение или незавершенная разработка по увеличению количества типов (например, list и tuple) для поддержки протокола буфера? (Не уверен, что я имею в виду PEP 688.)

chepner 30.08.2024 20:18

Другие вопросы по теме