Питон делает секцию по ссылке на строки? - PullRequest
26 голосов
/ 20 апреля 2011

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

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

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

Ответы [ 2 ]

42 голосов
/ 20 апреля 2011

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

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

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

Например:

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

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

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

0 голосов
/ 20 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...