Python Glossary English

все Python 3Строки (str)понятие

Строки в памяти — интернирование, неизменяемость

память

Строки в Python неизменяемы (immutable). Интернирование — кэширование коротких строк-идентификаторов. is проверяет идентичность объектов, == — равенство.

Синтаксис

s[i] = x  # TypeError  |  id(s)  |  sys.intern(s)

Из неизменяемости следует практическое: upper(), replace(), strip() и срезы ничего не правят на месте, а возвращают новую строку — забыть присвоить результат обратно самая частая ошибка новичка. Сравнивать строки нужно только через ==: is иногда «срабатывает» на литералах благодаря интернированию, но на строке, собранной в рантайме (из ввода или конкатенации), внезапно даёт False; с Python 3.8 сравнение через is с литералом ещё и вызывает SyntaxWarning.

Примеры

s = 'hello'
try:
    s[0] = 'H'
except TypeError as e:
    print(e)
# → 'str' object does not support item assignment
a = 'hello'
b = 'hello'
print(a == b)
# → True
print(a is b)
# → True (интернирование коротких строк)
import sys
x = sys.intern('some_long_string')
y = sys.intern('some_long_string')
print(x is y)
# → True (принудительное интернирование)
s2 = s.replace('h', 'H')
print(s, s2)
# → hello Hello (оригинал не изменился)

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности