Подтвердить что ты не робот

Использует ли Python фрагмент по ссылке на строки?

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

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

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

4b9b3361

Ответ 1

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

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

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

Например:

a = "a long string with 500,000 chars ..."
b = a[0]
del a

С дизайном среза в виде копии строка a немедленно освобождается. срез-как-эталонный дизайн будет содержать строку 500 кбайт в памяти, хотя вас интересует только первый персонаж.

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

Ответ 2

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