Изменяемые и неизменяемые объекты в Python {ПРИМЕРЫ}

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

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

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

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

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

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

В Python все является объектом

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

Эту функцию можно проверить с помощью интерпретатора Python, как показано ниже: –

Код Python:

print("The following instance is an object:",isinstance(3,object))
print("Another instance for object", isinstance(True, object))
def my_func():
    return "guru99"
print("This is a function example and regarded as an object in Python:", isinstance(my_func, object))

Вывод:

A following instance is an object: True
Another instance for object True
This is a function example and regarded as an object in Python: True

Кроме того, Python предоставляет встроенную функцию с именем id, которая возвращает адрес объекта, присутствующий в памяти языка программирования Python.

Код Python:

z=200
id(z)
print("The id of object is", id(z))

Вывод:

the id of object is 9795360

В приведенном выше коде функция id, имеющая синтаксис id(obj), выдает адрес obj в памяти Python. Здесь есть объект с именем z, и ему присвоено значение 200. Затем объект z передается в функцию id как id(z), и Python передает адрес объекта как 9795360.

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

В изменяемом объекте значение объекта меняется с течением времени.

В этом примере мы объяснили изменяемые объекты в Python, и в качестве применения изменяемых объектов используются списки, как показано ниже: –

Код Python:

mut_list = [1, 2, 3]
  print("The list in Python",mut_list)
mut_list[0] = 'Gurru99'
mut_list
  print("The list in Python after changing value",mut_list)

Вывод:

The list in Python [1, 2, 3]
The list in Python after changing value ['Gurru99', 2, 3]

Как мы видим в приведенном выше примере, изменяемый список в Python имел значения 1,2,3. Первый элемент изменяемого списка изменяется с 1 на Guru99, и он не создает новый объект при инициализации нового значения.

Здесь мы можем использовать метод id, чтобы использовать его. Фоллоwing иллюстрирует использование метода id для изменяемых объектов, как показано ниже: –

Код Python:

mut_list = [1, 2, 3]
print("The list in Python",mut_list)
print("the id of the list is ",id(mut_list))
mut_list[0] = 'Gurru99'
mut_list
print("The mut list in Python after changing value",mut_list)
print("the id of the list is post change in value",id(mut_list))

Результат

The list in Python [1, 2, 3]
the id of the list is 139931568729600
The list in Python after changing value ['Gurru99', 2, 3]
the id of the list is post change in value 139931568729600

Фоллоwing На рисунке показан изменяемый объект в Python, как показано ниже: –

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

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

Неизменяемые объекты в Python — это объекты, экземпляры которых не меняются с течением времени. Неизменяемые экземпляры определенного типа после создания не изменяются, и это можно проверить с помощью метода id Python.

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

Код Python:

a=244
print("the number before change is",a)
print("the id of number before change is",id(a))
a=344
print("the number after change is",a)
print("the id of number after change is",id(a))

Результат

the number before a change is 244
the id of number before change is 9796768
the number before change is 344
the id of number before change is 140032307887024

Выше можно было видеть, что произошло изменение в «a». Давайте изучим, как работает механизм:

  • При инициализации «a» значением 344 значение объекта не изменяется.
  • Вместо этого создается новый объект, ограниченный буквой «a».
  • Другой объект, которому присвоен номер 244, больше не будет доступен.
  • В приведенном выше примере использовался целочисленный объект.

При a=244 создается новый объект со ссылкой на «a», как показано ниже: –

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

После публикации с использованием a=344 появился новый объект, на который ссылается «a». Следующееwing диаграмма представляет то же самое: –

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

Следовательно, всякий раз, когда имени типа int присваивается новое значение, происходит изменение привязки имени с другим объектом. Тот же принцип применим и к кортежам, струны, float и Boolean, поэтому называются неизменяемыми.

Последствия для ключей словаря в Python

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

В любой момент ключ указывает на один конкретный элемент. Ключи словарей неизменяемы.

Давайте возьмем гипотетический сценарий, как показано ниже: –

a = [4, 6]
b = [5, 6, 7]
my_dict = {a: 'x', b: 'y'}
print(my_dict)

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

Здесь, a определяется как [4,6], а в словаре он определяется как x. Здесь, b определяется как [5,6,7], а в словаре он определяется как y.

  • Ключ «a» имеет значение [4,6] и далее инициализируется значением x.
  • Ключ «b» имеет значение [5,6,7], которое далее инициализируется значением «y» в словаре.
  • Теперь предположим, что значение 'а» к нему добавляются цифры 5 и 7, которые являются ключом словаря.
  • Тогда словарь был изменен, и это дало бы оба 'Икс' и 'y' в качестве значений для приведенного выше словаря.

Рассмотрим следующееwing сценарий, как показано выше: –

a = [5, 6,7]
b = [5, 6, 7]
my_dict = {a: 'x', b: 'y'}
print(my_dict)

Следовательно, как язык программирования Python делает ключи словаря неизменяемыми, а словари являются неизменяемыми типами данных.

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

Однако Python предоставляет исключения из неизменяемости, такие исключения можно наблюдать для типа объекта кортеж. Кортеж может представлять собой комбинацию изменяемых и неизменяемых типов объектов. Давайте возьмем пример, чтобы объяснить исключения из неизменности, как показано ниже: –

Код Python:

tupexample=([1,1],'guru99')
print("the tuple before change",tupexample)
print("the id of tuple before change",id(tupexample))
tupexample=([2,2],'guru99')
print("the tuple after change",tupexample)
print("the id of tuple after change",id(tupexample))

Вывод:

the tuple before change ([1, 1], 'guru99')
the id of tuple before change 140649480694656
the tuple after change ([2, 2], 'guru99')
the id of tuple after change 140649480694592

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

Таким образом, возникает исключение: неизменяемые объекты не меняют своего значения, но значение составляющих меняет свое значение.

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

Вот основные различия между изменяемыми и неизменяемыми объектами:

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

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

Класс объяснение Неизменяемый или нет
Буль Логическое значение Неизменный
Int Целочисленное значение (величина может быть произвольной) Неизменный
Поплавок Число с плавающей запятой Неизменный
Список Последовательность объектов изменчивой природы изменчивый
Кортеж Последовательность объектов неизменяемой природы Неизменный
Улица Символ/строка Неизменный
Поставьте набор отдельных объектов неупорядоченного характера изменчивый
Замороженный Установить класс неизменяемой природы Неизменный
Диктовать Словарное или ассоциативное отображение изменчивый