строки в python неизменяемы что это значит

Изменяемые vs. неизменяемые типы данных в Python

Python считается одним из самых удивительных языков программирования. Многие люди выбирают его в качестве первого языка из-за его элегантности и простоты. Благодаря широкому сообществу, избытку пакетов и согласованности синтаксиса, опытные профессионалы также используют Python. Тем не менее, существует одна вещь, которая раздражает как новичков, так и некоторых профессиональных разработчиков – объекты Python.

Изменяемые vs. неизменяемые объекты

Как известно, объектом в Python является абсолютно все, а каждый объект относится к какому-либо типу данных. Типы данных бывают изменяемые и неизменяемые (англ. mutable и immutable). К неизменяемым относятся целые числа (int), числа с плавающей запятой (float), булевы значения (bool), строки (str), кортежи (tuple). К изменяемым — списки (list), множества (set), байтовые массивы (byte arrays) и словари (dict).

Функции id() и type()

Разобраться с изменяемостью типов данных нам помогут встроенные функции и операторы Python.

Встроенный метод id() возвращает идентификатор объекта в виде целого числа. Это целое число обычно относится к месту хранения объекта в памяти. Встроенная функция type() возвращает тип объекта.

Неизменяемые типы данных

Давайте рассмотрим некоторые неизменяемые типы.

Целые числа (int)

Строки (str)

То же самое верно и для строкового типа данных. Мы не можем изменить существующую переменную, вместо этого мы должны создать новую с тем же именем.

Кортежи (tuple)

Давайте разберем кортежи. Мы определили кортеж с 4 значениями. Воспользуемся функцией id() для вывода его адреса. Если мы захотим изменить значение первого элемента, то получим ошибку TypeError. Это означает, что кортеж не поддерживает присвоение или обновление элементов.

С другой стороны, мы можем обновить весь кортеж, задав его с нуля. После этого мы увидим новые значения элементов кортежа и новый адрес.

Числа с плавающей запятой (float)

Если же мы обновим float, переопределив его, то при вызове получим новое значение и новый адрес.

Изменяемые типы данных

Теперь давайте рассмотрим некоторые изменяемые типы.

Списки (list)

Определим список с именем x и добавим в него некоторые значения. После этого обновим список: присвоим новое значение элементу с индексом 1. Можем заметить, что операция успешно выполнилась.

Вышеописанные действия являются простым и базовым примером модификации. Чтобы проверить изменчивость на более глубоком уровне, давайте рассмотрим тот же пример с небольшими изменениями.

Теперь добавим новое значение к списку x и проверим обновленный вывод.

Словари (dict)

Словари — часто используемый тип данных в Python. Давайте посмотрим на их изменчивость.

Определим словарь под именем dict с тремя ключами и их значениями. Когда мы распечатаем его, отобразится все его содержимое. Можно распечатать каждое значение словаря отдельно, а также использовать ключи вместо индексов. Подробнее о добавлении элементов в словарь вы можете узнать тут.

Списки и кортежи: наглядный пример изменяемых и неизменяемых объектов

Давайте по отдельности определим список и кортеж. Убедимся, что в кортеже есть значение типа список, а в списке есть значение типа кортеж.

Нулевой элемент кортежа – список. Давайте попробуем изменить какой-то из элементов списка, указав его индекс. Например, можно поменять в нулевом элементе кортежа (т.е. в списке) нулевой элемент. Нам успешно удается это сделать, потому что список – изменяемый объект, даже если он находится в кортеже.

Если же, наоборот, кортеж находится в списке, то вы не сможете поменять элемент этого кортежа, хотя он и находится в изменяемом списке. Ведь сам кортеж неизменяем. Поэтому такие преобразования невозможны.

Заключение

Мы разобрали различия между изменяемым и неизменяемым объектами в Python. Стоит понимать, что всё в Python называется объектами. И главное различие между ними – являются они изменяемыми или неизменяемыми.

Источник

Основы работы со строками в Python

До сих пор мы обсуждали числа как стандартные типы данных в Python. В этом разделе руководства мы обсудим самый популярный тип данных, то есть строку и методы работы со строками в Python.

Что такое строка в Python?

Строка Python – это набор символов, заключенных в одинарные, двойные или тройные кавычки. Компьютер не понимает персонажей; внутри он хранит манипулируемый символ как комбинацию нулей и единиц.

Каждый символ кодируется символом ASCII или Unicode. Таким образом, мы можем сказать, что строки Python также называются набором символов Unicode.

В Python строки можно создавать, заключая символ или последовательность символов в кавычки. Python позволяет нам использовать одинарные кавычки, двойные кавычки или тройные кавычки для создания строки.

Рассмотрим следующий пример на Python для создания строки.

Проверим тип переменной str с помощью скрипта

В Python строки рассматриваются как последовательность символов, что означает, что Python не поддерживает символьный тип данных; вместо этого одиночный символ, записанный как ‘p’, рассматривается как строка длины 1.

Создание строки в Python

Мы можем создать строку, заключив символы в одинарные или двойные кавычки. Python также предоставляет тройные кавычки для представления строки, но обычно используется для многострочных строк или строк документации.

Индексирование и разбивка строк

Как и в других языках, индексирование строк Python начинается с 0. Например, строка «HELLO» индексируется, как показано на рисунке ниже.

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Рассмотрим следующий пример:

Как показано в Python, оператор slice [] используется для доступа к отдельным символам строки. Однако мы можем использовать оператор:(двоеточие) в Python для доступа к подстроке из данной строки. Рассмотрим следующий пример.

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Здесь мы должны заметить, что верхний диапазон, указанный в операторе среза, всегда является исключающим, т.е. если задано str = ‘HELLO’, тогда str [1: 3] всегда будет включать str [1] = ‘E’, str [2 ] = ‘L’ и ничего больше.

Рассмотрим следующий пример:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Рассмотрим следующий пример:

Переназначение строк

Обновить содержимое строк так же просто, как присвоить его новой строке. Строковый объект не поддерживает присвоение элемента, т. е. строка может быть заменена только новой строкой, поскольку ее содержимое не может быть частично заменено. Строки неизменяемы в Python.

Рассмотрим следующий пример.

Однако в примере 1 строку str можно полностью присвоить новому содержимому, это указано в следующем примере.

Удаление строки

Как мы знаем, строки неизменяемы. Мы не можем удалить символы из строки. Но мы можем удалить всю строку с помощью ключевого слова del.

Теперь мы удаляем всю строку.

Строковые операторы

ОператорОписание
+Он известен как оператор конкатенации, используемый для соединения строк по обе стороны от оператора.
*Известен как оператор повторения. Он объединяет несколько копий одной и той же строки.
[]оператор среза. Он используется для доступа к подстрокам определенной строки.
[:]оператор среза диапазона, используется для доступа к символам из указанного диапазона.
inОператор членства. Он возвращается, если в указанной строке присутствует определенная подстрока.
not inТакже является оператором членства и выполняет функцию, обратную in. Он возвращает истину, если в указанной строке отсутствует конкретная подстрока.
r / RИспользуется для указания необработанной строки. Необработанные строки применяются в тех случаях, когда нам нужно вывести фактическое значение escape-символов, таких как «C: // python». Чтобы определить любую строку как необработанную, за символом r или R следует строка.
%Необходим для форматирования строк. Применяет спецификаторы формата, используемые в программировании на C, такие как %d или %f, для сопоставления их значений в python. Мы еще обсудим, как выполняется форматирование в Python.

Рассмотрим следующий пример, чтобы понять реальное использование операторов Python.

Форматирование строки Python

Управляющая последовательность

Предположим, нам нужно написать текст – They said, “Hello what’s going on?” – данный оператор может быть записан в одинарные или двойные кавычки, но он вызовет ошибку SyntaxError, поскольку он содержит как одинарные, так и двойные кавычки.

Рассмотрим следующий пример, чтобы понять реальное использование операторов Python.

Мы можем использовать тройные кавычки для решения этой проблемы, но Python предоставляет escape-последовательность.

Символ обратной косой черты(/) обозначает escape-последовательность. За обратной косой чертой может следовать специальный символ, который интерпретируется по-разному. Одиночные кавычки внутри строки должны быть экранированы. Мы можем применить то же самое, что и в двойных кавычках.

Список escape-последовательностей приведен ниже:

Вот простой пример escape-последовательности.

Мы можем игнорировать escape-последовательность из данной строки, используя необработанную строку. Мы можем сделать это, написав r или R перед строкой. Рассмотрим следующий пример.

Метод format()

Метод format() – самый гибкий и полезный метод форматирования строк. Фигурные скобки <> используются в качестве заполнителя в строке и заменяются аргументом метода format(). Посмотрим на данный пример:

Форматирование строки Python с использованием оператора %

Python позволяет нам использовать спецификаторы формата, используемые в инструкции printf языка C. Спецификаторы формата в Python обрабатываются так же, как и в C. Однако Python предоставляет дополнительный оператор%, который используется в качестве интерфейса между спецификаторами формата и их значениями. Другими словами, мы можем сказать, что он связывает спецификаторы формата со значениями.

Рассмотрим следующий пример.

Строковые функции Python

Python предоставляет различные встроенные функции, которые используются для обработки строк.

Источник

Python 3: изменяемый, неизменяемый…

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Многие из нас считают Python прекрасным языком программирования. В нем легко разобраться, он очень хорошо читается, а код на нем легко поддерживать. Но основная причина простоты этого языка состоит в том, что под капотом у него есть очень много всего. И хотя многие люди просто знают, что в языке есть и сложные вещи, и им этого достаточно, понимание тонкостей поможет вам избежать появления многих багов в ваших программах. Цель этой статьи — познакомить вас с этими тонкостями.

Объекты

Давайте начнем с краеугольного камня Python — с объектов. Объектом является буквально все. Ваш модуль это объект, функция — объект, число — тоже объект. Объекты это просто экземпляры классов.

Чтобы понять эту концепцию, мы можем представить, что объекты — это отдельные люди, а классы — это группы, к которым эти люди принадлежат. Скажем, все мы — люди (класс human), но я — уникальный индивид (экземпляр класса human).

В Python все является объектом. Каждый объект имеет собственный тип данных и внутреннее состояние (данные). Давайте для начала уясним, как данные хранятся в памяти. Для этого рассмотрим пару примеров.

Пример 1

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Пример 2

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Идентичность и тип

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Функция id() возвращает идентификатор указанной вами переменной. Каждая переменная в Python ссылается на какой-нибудь объект, а идентификатор переменной это целое число, «привязанное» к конкретному объекту. В реализации CPython это число — адрес объекта в памяти. Идентификатор объекта позволяет разграничить случаи, когда переменные идентичны, и когда они ссылаются на один и тот же объект. Для определения идентичности мы можем использовать «==», а «is» используется для определения того, указывают ли переменные на один и тот же объект.

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Но все станет куда более странно, если мы сделаем вот так:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Вероятно, вы думаете: «Погодите, погодите! Что?! Ведь пару секунд назад, когда мы рассматривали списки, я понял, что они разные. А эти тогда почему одинаковые?» Чтобы ответить на этот вопрос, мы должны углубиться в предмет изменяемости.

Изменяемые объекты

Итак, что же такое изменяемость (мутабельность)? Выражаясь простым языком, это способность мутировать — или изменять объект. К изменяемым (мутабельным) типам в Python относятся списки, множества, словари и bytearrays (массивы байтов). Давайте рассмотрим пример с нашим старым добрым списком. Мы можем добавлять в него элементы:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Мы можем удалять из него элементы:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Как уже говорилось, в Python все является объектом. Поэтому каждый элемент в списке это тоже объект. Если мы приглядимся, все опять станет очень странным:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Почему идентификатор l[1] изменился? Идентификатор всего списка остался неизменным, хотя мы изменили его значения, но почему же изменился идентификатор его элемента? Потому что числа и строки неизменяемы (не мутабельны).

Неизменяемые объекты

Неизменяемость это противоположность изменяемости (логично). Если объект неизменяемый, это значит, что вы не можете менять его содержимое. К встроенным неизменяемым типам относятся целые числа, числа с плавающей точкой, комплексные числа, строки, кортежи, frozenset-ы и байты.

В приведенном выше примере объект список изначально содержал ссылки на объекты «1», «2» и «3». Хотя мы не можем изменить сам объект (цифру 2), можно изменить список за счет изменения хранящейся в нем ссылки. Теперь список содержит ссылку на объект «Hello». Другими словами, произошло переназначение. И хотя увеличивать неизменяемый объект нельзя, мы можем сделать так:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Кажется, что мы добавили «World» к «Hello», но на самом деле произошло примерно следующее:

Было вычислено значение s («Hello») плюс “ World”, и переменная s получила ссылку на новый объект. Похожий процесс происходит при добавлении чисел:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Но если вы попытаетесь изменить элемент в неизменяемом наборе, интерпретатор возбудит исключение:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Аналогично — хотя удалить элемент в неизменяемом объекте нельзя, вы можете взять срез объекта, в результате чего вернется новый объект, содержащий нужные значения:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

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

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Преаллокация в Python

А теперь домашнее задание для вас:

Почему это важно?

При присваивании значений переменным очень важно понимать разницу между изменяемыми и неизменяемыми объектами. Изменяемые объекты имеют пару тузов в рукаве. Мы уже рассматривали этот пример:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

А что, если мы хотим создать копию объекта, чтобы при внесении изменений не волноваться о том, что это затронет оригинал? Мы можем взять срез списка, при этом вернется новый объект (так же, как когда мы брали срез неизменяемого объекта):

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Добавление элементов в списки тоже может быть хитрой штукой. В Python то, что находится в левой части выражения присваивания, получает ссылку на все, что вычисляется в правой. Поэтому:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Мы видим, что объект остался прежним. Это замещающее присваивание — эквивалент добавления элементов в список. Но поскольку иммутабельные объекты не могут быть изменены, выражения a += b и a = a + b будут работать одинаково и аналогично нашему примеру «Hello World».

Передача аргументов в функции

В других языках программирования переменные часто передаются одним из двух способов:

Но Python в этом плане уникален. Python передает ссылку на объект. Аналогично тому как мы делали переменную y псевдонимом переменной x ( x = y ), при передаче переменной в функцию аргумент функции становится псевдонимом для ссылки на объект.

Это означает, что если внутри функции произойдет новое присваивание, это не изменит оригинальную переменную, переданную в функцию. Поскольку иммутабельные типы не могут быть изменены, никакое изменение переменной внутри функции не сохранится:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Но поскольку списки мутабельны, их содержимое изменять можно:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Обратите внимание, что ссылка на список остается той же на протяжении всей программы. Тем не менее, если бы мы переприсвоили значение l внутри функции, это не затронуло бы исходный список.

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Исключения в неизменяемости

Не все неизменяемые объекты на самом деле неизменяемы. Да, все очень запутанно, но сейчас разберемся.

Как уже говорилось, в Python контейнеры типа кортежей неизменяемы. Это значит, что значение tuple не может меняться после того, как кортеж создан. Но «значение» кортежа на самом деле является последовательностью имен с неизменяемыми привязками к объектам. Главное, что нужно понять, это что неизменяемы именно привязки, а не сами объекты.

Кортеж t содержит элементы с разными типами данных. Первый элемент — неизменяемая строка, а второй — изменяемый список. Сам кортеж неизменяемый (нет никаких методов для изменения его содержимого). Аналогично и строка неизменяема, потому что у строк нет никаких методов для их изменения. Но объект список имеет методы, с помощью которых его можно изменить, так что он изменяемый. Это мелочь, но важная: «значение» неизменяемого объекта не может меняться, но объекты, из которых он состоит, — могут.

Заключение

Понимание тонкостей языка может быть чрезвычайно полезным. Многие программисты не уделяют достаточно времени тому, чтобы хорошенько изучить языки, которыми пользуются на постоянной основе. Но близкое знакомство с Python — отличный способ избежать багов.

Кроме того, самодисциплина, позволяющая вам сесть и изучить, что происходит под капотом языка, — сама по себе отличная вещь, которая сослужит вам прекрасную службу в вашей программистской карьере.

Источник

Изменяемость объектов в Python

Хочешь знать больше о Python?

Подпишись на наш канал о Python в Telegram!

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Многие из нас считают Python прекрасным языком программирования. В нем легко разобраться, он очень хорошо читается, а код на нем легко поддерживать. Но основная причина простоты этого языка состоит в том, что под капотом у него есть очень много всего, — пишет сайт pythonist.ru.

И хотя многие люди просто знают, что в языке есть и сложные вещи, и им этого достаточно, понимание тонкостей поможет вам избежать появления многих багов в ваших программах. Цель этой статьи — познакомить вас с этими тонкостями.

Объекты

Давайте начнем с краеугольного камня Python — с объектов. Объектом является буквально все. Ваш модуль это объект, функция — объект, число — тоже объект. Объекты это просто экземпляры классов.

Чтобы понять эту концепцию, мы можем представить, что объекты — это отдельные люди, а классы — это группы, к которым эти люди принадлежат. Скажем, все мы — люди (класс human), но я — уникальный индивид (экземпляр класса human).

В Python все является объектом. Каждый объект имеет собственный тип данных и внутреннее состояние (данные). Давайте для начала уясним, как данные хранятся в памяти. Для этого рассмотрим пару примеров.

Пример 1

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Пример 2

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Идентичность и тип

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Функция id() возвращает идентификатор указанной вами переменной. Каждая переменная в Python ссылается на какой-нибудь объект, а идентификатор переменной это целое число, «привязанное» к конкретному объекту. В реализации CPython это число — адрес объекта в памяти. Идентификатор объекта позволяет разграничить случаи, когда переменные идентичны, и когда они ссылаются на один и тот же объект. Для определения идентичности мы можем использовать «==», а «is» используется для определения того, указывают ли переменные на один и тот же объект.

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Но все станет куда более странно, если мы сделаем вот так:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Вероятно, вы думаете: «Погодите, погодите! Что?! Ведь пару секунд назад, когда мы рассматривали списки, я понял, что они разные. А эти тогда почему одинаковые?» Чтобы ответить на этот вопрос, мы должны углубиться в предмет изменяемости.

Изменяемые объекты

Итак, что же такое изменяемость (мутабельность)? Выражаясь простым языком, это способность мутировать — или изменять объект. К изменяемым (мутабельным) типам в Python относятся списки, множества, словари и bytearrays (массивы байтов). Давайте рассмотрим пример с нашим старым добрым списком. Мы можем добавлять в него элементы:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Мы можем удалять из него элементы:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Как уже говорилось, в Python все является объектом. Поэтому каждый элемент в списке это тоже объект. Если мы приглядимся, все опять станет очень странным:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Почему идентификатор l[1] изменился? Идентификатор всего списка остался неизменным, хотя мы изменили его значения, но почему же изменился идентификатор его элемента? Потому что числа и строки неизменяемы (не мутабельны).

Неизменяемые объекты

Неизменяемость это противоположность изменяемости (логично). Если объект неизменяемый, это значит, что вы не можете менять его содержимое. К встроенным неизменяемым типам относятся целые числа, числа с плавающей точкой, комплексные числа, строки, кортежи, frozenset-ы и байты.

В приведенном выше примере объект список изначально содержал ссылки на объекты «1», «2» и «3». Хотя мы не можем изменить сам объект (цифру 2), можно изменить список за счет изменения хранящейся в нем ссылки. Теперь список содержит ссылку на объект «Hello». Другими словами, произошло переназначение. И хотя увеличивать неизменяемый объект нельзя, мы можем сделать так:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Кажется, что мы добавили «World» к «Hello», но на самом деле произошло примерно следующее:

Было вычислено значение s («Hello») плюс “ World”, и переменная s получила ссылку на новый объект. Похожий процесс происходит при добавлении чисел:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Но если вы попытаетесь изменить элемент в неизменяемом наборе, интерпретатор возбудит исключение:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Аналогично — хотя удалить элемент в неизменяемом объекте нельзя, вы можете взять срез объекта, в результате чего вернется новый объект, содержащий нужные значения:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

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

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Преаллокация в Python

А теперь домашнее задание для вас:

Почему это важно?

При присваивании значений переменным очень важно понимать разницу между изменяемыми и неизменяемыми объектами. Изменяемые объекты имеют пару тузов в рукаве. Мы уже рассматривали этот пример:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

А что, если мы хотим создать копию объекта, чтобы при внесении изменений не волноваться о том, что это затронет оригинал? Мы можем взять срез списка, при этом вернется новый объект (так же, как когда мы брали срез неизменяемого объекта):

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Добавление элементов в списки тоже может быть хитрой штукой. В Python то, что находится в левой части выражения присваивания, получает ссылку на все, что вычисляется в правой. Поэтому:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Мы видим, что объект остался прежним. Это замещающее присваивание — эквивалент добавления элементов в список. Но поскольку иммутабельные объекты не могут быть изменены, выражения a += b и a = a + b будут работать одинаково и аналогично нашему примеру «Hello World».

Передача аргументов в функции

В других языках программирования переменные часто передаются одним из двух способов:

Но Python в этом плане уникален. Python передает ссылку на объект. Аналогично тому как мы делали переменную y псевдонимом переменной x ( x = y ), при передаче переменной в функцию аргумент функции становится псевдонимом для ссылки на объект.

Это означает, что если внутри функции произойдет новое присваивание, это не изменит оригинальную переменную, переданную в функцию. Поскольку иммутабельные типы не могут быть изменены, никакое изменение переменной внутри функции не сохранится:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Но поскольку списки мутабельны, их содержимое изменять можно:

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Обратите внимание, что ссылка на список остается той же на протяжении всей программы. Тем не менее, если бы мы переприсвоили значение l внутри функции, это не затронуло бы исходный список.

строки в python неизменяемы что это значит. Смотреть фото строки в python неизменяемы что это значит. Смотреть картинку строки в python неизменяемы что это значит. Картинка про строки в python неизменяемы что это значит. Фото строки в python неизменяемы что это значит

Исключения в неизменяемости

Не все неизменяемые объекты на самом деле неизменяемы. Да, все очень запутанно, но сейчас разберемся.

Как уже говорилось, в Python контейнеры типа кортежей неизменяемы. Это значит, что значение tuple не может меняться после того, как кортеж создан. Но «значение» кортежа на самом деле является последовательностью имен с неизменяемыми привязками к объектам. Главное, что нужно понять, это что неизменяемы именно привязки, а не сами объекты.

Кортеж t содержит элементы с разными типами данных. Первый элемент — неизменяемая строка, а второй — изменяемый список. Сам кортеж неизменяемый (нет никаких методов для изменения его содержимого). Аналогично и строка неизменяема, потому что у строк нет никаких методов для их изменения. Но объект список имеет методы, с помощью которых его можно изменить, так что он изменяемый. Это мелочь, но важная: «значение» неизменяемого объекта не может меняться, но объекты, из которых он состоит, — могут.

Заключение

Понимание тонкостей языка может быть чрезвычайно полезным. Многие программисты не уделяют достаточно времени тому, чтобы хорошенько изучить языки, которыми пользуются на постоянной основе. Но близкое знакомство с Python — отличный способ избежать багов.

Кроме того, самодисциплина, позволяющая вам сесть и изучить, что происходит под капотом языка, — сама по себе отличная вещь, которая сослужит вам прекрасную службу в вашей программистской карьере.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

НомерПоследовательностьОписаниеПример
1.\newlineИгнорирует новую строку