Я хочу знать, если когда я делаю что-то вроде
a = "This could be a very large string..." b = a[:10]
, создается новая строка или возвращается представление / итератор
Python выполняет слайс-копию , то есть каждый раз, когда вы ломаете (кроме очень тривиальных слайсов , таких как a[:]), он копирует все данные в новый строковый объект.
a[:]
По словам одного из разработчиков , этот выбор был сделан, потому что
Подход [слайс-по-ссылке] сложнее, сложнее в реализации и может привести к неожиданному поведению. Например: a = "a long string with 500,000 chars ..." b = a[0] del a С дизайном фрагмента как копии строка a немедленно освобождается. дизайн среза как эталона сохранит строку 500 КБ в памяти, хотя Вас интересует только первый символ.
Подход [слайс-по-ссылке] сложнее, сложнее в реализации и может привести к неожиданному поведению.
Например:
a = "a long string with 500,000 chars ..." b = a[0] del a
С дизайном фрагмента как копии строка a немедленно освобождается. дизайн среза как эталона сохранит строку 500 КБ в памяти, хотя Вас интересует только первый символ.
a
Очевидно, что если вам абсолютно нужно представление строки, вы можете использовать объект memoryview.
memoryview
Когда вы разрезаете строки, они возвращают новый экземпляр String. Строки являются неизменяемыми объектами.