Изменяемые и не изменяемые типы данных
Привет всем! В этой небольшой статье мы рассмотрим понятия "изменяемости" и "неизменяемости" данных в Python.
Изначально стоит сказать о том, что объектом в Python является абсолютно все, а каждый объект относится к какому-либо типу данных. Новичкам важно сразу усвоить, что все типы данных в Python могут быть либо изменяемыми (mutable), либо неизменяемыми (immutable).
Прежде, чем мы перейдём к более подробному изучению, давайте вспомним атрибуты объектов:
- id: адрес в памяти, на который ссылается данный объект
- тип: тип создаваемого объекта. Например, целое число, список, строка и т. д.
- значение: значение, которое хранится в данном объекте.
После создания объекта его идентификатор и тип изменить нельзя, а вот значение в изменяемых объектах может быть изменено.
Неизменяемые объекты (Immutable)
Неизменяемые объекты не могут быть изменены после их создания. Когда мы присваиваем новое значение неизменяемому объекту, Python не перезаписывает его, а создаёт новый объект с тем же именем.
Для проверки такого поведения, мы можем воспользоваться функцией id
- она возвращает уникальный номер, который присваивается переменной при создании.
I am 25 years old. id my_age = 140703593987256 I am 26 years old. id my_age = 140703593987288
Когда мы прибавляем год к нашему возрасту (переменной my_age), на его месте создаётся новый объект с тем же именем. Мы можем это понят, так как до прибавления года id переменной my_age = 140703593987256
, а после id my_age = 140703593987288
.
Давайте попробуем изменить неизменяемый тип данных и посмотрим на результат:
names[0] = "Python" ~~~~~^^^ TypeError: 'tuple' object does not support item assignment
Когда мы попытаемся изменить элемент кортежа (tuple) в Python, мы столкнемся с ошибкой, которая указывает на то, что объект типа 'tuple' не поддерживает присваивание элементов. Это произошло потому, что мы попытались изменить неизменяемый тип данных :)
Давайте ещё раз взглянем на неизменяемые типы данных:
Я хотел бы дать вам интересное задание, чтобы вы немного больше узнали, об этом виде типов данных.
Задание: создайте неизменяемый тип данных (например кортеж) и поместите в него изменяемый тип данных. Что произойдёт? Сможем ли мы изменить изменяемый тип данных внутри неизменяемого?
Изменяемые объекты (Mutable)
Изменяемые объекты могут быть изменены после их создания. Рассмотрим на примере:
1877224118528 1877224118528
Из вывода программы мы можем понять, что адрес списка в памяти компьютера не изменился после добавления нового имени, что свидетельствует о том, что мы продолжаем работать с тем же самым объектом, а не создали новый. Это происходит потому, что список в Python действительно является изменяемым (mutable) типом данных.
Важность понимания изменяемости
Для новичков в программировании важно понимать разницу между изменяемыми и неизменяемыми типами данных в Python, так как это влияет на то, как вы будете работать с данными и как они будут храниться в памяти. Вот основные моменты, которые стоит запомнить:
- Неизменяемые типы данных (например, строки, числа, кортежи) не могут быть изменены после их создания. Это означает, что любая операция, которая кажется изменением, на самом деле создает новый объект. Это обеспечивает целостность данных и избавляет нас от возможных ошибок.
- Изменяемые типы данных (например, списки, словари, множества) могут быть изменены после их создания. Вы можете добавлять, удалять или изменять элементы этих объектов. Однако, это также означает, что вы должны быть осторожны, чтобы не изменить объект непреднамеренно, особенно когда он передается в функции или используется в качестве значения в словарях.