Питон делает секцию по ссылке на строки?

Я хочу знать, если когда я делаю что-то вроде

a = "This could be a very large string..."
b = a[:10]

создается новая строка или возвращается представление / итератор

2 ответа

Решение

Python выполняет слайс-копирование, то есть каждый раз, когда вы ломаете (за исключением очень тривиальных слайсов, таких как a[:]), он копирует все данные в новый строковый объект.

По словам одного из разработчиков, этот выбор был сделан из-за

Подход [слайс-по-ссылке] сложнее, сложнее в реализации и может привести к неожиданному поведению.

Например:

a = "длинная строка с 500 000 символов..."
b = a[0]
дель а

С дизайном фрагмента как копии строка a немедленно освобождается. Проект среза в качестве ссылки сохранит в памяти строку размером 500 КБ, хотя вас интересует только первый символ.

По-видимому, если вам абсолютно необходим просмотр строки, вы можете использовать memoryview объект.

Когда вы разрезаете строки, они возвращают новый экземпляр String. Строки являются неизменяемыми объектами.

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