Изменяемые и неизменяемые объекты в Python — примеры

В этом уроке вы узнаете об изменяемых и неизменяемых типах данных и объектах в Python.

Содержание

Что такое изменяемые и неизменяемые объекты в Python?

В Python все является объектом. Объект имеет свое внутреннее состояние. Некоторые объекты позволяют вам изменять свое внутреннее состояние, а другие — нет.

Объект, внутреннее состояние которого можно изменить, называется изменяемым объектом, а объект, внутреннее состояние которого невозможно изменить, называется неизменяемым объектом.

Ниже приведены примеры неизменяемых объектов:

  • Числа (int, float, bool,…)
  • Строки
  • Кортежи
  • Frozen sets

Ниже приведены примеры изменяемых объектов:

  • Списки
  • Множества
  • Словари

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

Пример неизменяемого объекта в Python

Когда вы объявляете переменную и присваиваете ей целое число, Python создает новый целочисленный объект и устанавливает переменную для ссылки на этот объект:

counter = 100

Чтобы получить адрес памяти, на который ссылается переменная, вы используете функцию id(). Функция id() возвращает число, основанное на 10:

print(id(counter))

Выход:

140717671523072

А чтобы преобразовать число по основанию 10 в шестнадцатеричное, вы можете использовать функцию hex():

print(hex(id(100)))

Выход:

0x7ffb62d32300

В памяти есть переменная counter, которая ссылается на целочисленный объект, расположенный по адресу 0x7ffb62d32300:

Пример неизменяемого объекта в Python

Следующее изменяет counter на 200 и отображает его значение на экране:

counter = 200
print(counter)

Выход:

200

Кажется, что значение объекта, на который ссылается переменная counter, меняется, но это не так.

Фактически, Python создает новый целочисленный объект со значением 200 и переназначает переменную counter так, чтобы она ссылалась на новый объект следующим образом:

Неизменяемый объект Python - пример 2

Переназначение не меняет значение первого целочисленного объекта. Он просто переназначает ссылку.

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

counter = 200
print(counter)
print(hex(id(counter)))

Выход:

0x7ffb62d32f80

Пример изменяемого объекта в Python

Следующий код определяет список чисел и отображает адрес памяти списка:

ratings = [1, 2, 3]
print(hex(id(ratings)))  # 0x1840f97a340

Python создает новый объект списка и устанавливает переменную Ranks для ссылки на список:

Пример изменяемого объекта Python

Когда вы добавляете номер в список следующим образом:

ratings.append(4)

Python напрямую меняет значение объекта списка:

Изменение значения объекта списка

И Python не создает новый объект, как в предыдущем неизменяемом примере.

Следующий код показывает значение и адрес памяти списка, на который ссылается переменная ratings:

print(ratings)  # [1, 2, 3, 4]
print(hex(id(ratings)))  # 0x1840f97a340

Как вы можете ясно видеть из вывода, адрес памяти списка тот же.

Пример с изменяемым и неизменяемым объектами в  Python

Важно понимать, что неизменяемые объекты — это не что-то замороженное или абсолютно постоянное. Давайте посмотрим на пример.

Следующий код определяет кортеж, элементами которого являются два списка:

low = [1, 2, 3]
high = [4, 5]

rankings =(low, high)

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

Изменяемый и неизменяемый объекты в Python

Однако кортеж rankings содержит два списка, которые являются изменяемыми объектами. Таким образом, вы можете без проблем добавить новый элемент в верхний список:

high.append(6)
print(rankings)

И кортеж rankings изменится на следующее:

([1, 2, 3], [4, 5, 6])

Пример с изменяемым и неизменяемым объектами Python

Похожие посты
Добавить комментарий

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