Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 12, 2012 00:53:54

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Изменяемые строки

В питоне строки, с одной стороны, неизменяемые, т.к. только неизменяемые обьекты могут использоваться в качестве ключа в хеш-массивах, а с другой стороны, str+=str2 в CPython работает на месте за O(len(str2)). Как это сделано, что, с одной стороны, строки изменяемые, а с другой - по прежнему нет?

Офлайн

#2 Окт. 12, 2012 05:30:28

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Изменяемые строки

A id у строки тот же остается?



Офлайн

#3 Окт. 12, 2012 05:56:42

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Изменяемые строки

А откуда информация о сложности? Как я понимаю слияние строк сведется к вызову string_concat из stringobject.c. А там выделяется память под новую строку и копируется сначала содержимое первой, потом содержимое второй, так что O(len(str1)+len(str2)). Единственное там есть оптимизации для пустых строк.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#4 Окт. 12, 2012 16:32:58

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Изменяемые строки

PooH
А откуда информация о сложности?
Из документации.

CPython implementation detail: If s and t are both strings, some Python implementations such as CPython can usually perform an in-place optimization for assignments of the form s = s + t or s += t. When applicable, this optimization makes quadratic run-time much less likely. This optimization is both version and implementation dependent. For performance sensitive code, it is preferable to use the str.join() method which assures consistent linear concatenation performance across versions and implementations.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version