Изменяемые и неизменяемые объекты в Python {ПРИМЕРЫ}
Что такое изменяемый объект?
Изменяемый в Python можно определить как объект, который может изменяться или рассматриваться как нечто изменчивое в природе. Изменяемый означает возможность изменять или редактировать значение.
Изменяемые объекты в Python позволить программистам иметь объекты, которые могут изменять свои значения. Обычно они используются для хранения набора данных. Его можно рассматривать как нечто, что мутировало, и внутреннее состояние, применимое внутри объекта, изменилось.
Что такое неизменяемые объекты?
Неизменяемые объекты в Python можно определить как объекты, которые не меняют свои значения и атрибуты с течением времени.
Эти объекты становятся постоянными после создания и инициализации и составляют важную часть структур данных, используемых в Python.
Python используется в числах, кортежи, строки, замороженные наборы и пользовательские классы, за некоторыми исключениями. Они не могут измениться, а их значения остаются постоянными после их инициализации и, следовательно, называются неизменяемыми.
In 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, чтобы использовать его. Ниже показано использование метода 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
На следующем рисунке показан изменяемый объект 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», как показано ниже: –
После публикации с использованием a=344 появился новый объект, на который ссылается «a». Следующая диаграмма представляет то же самое: –
Следовательно, всякий раз, когда имени типа 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' в качестве значений для приведенного выше словаря.
Рассмотрим следующий сценарий, как показано выше: –
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 | Целочисленное значение (величина может быть произвольной) | Неизменный |
Поплавок | Число с плавающей запятой | Неизменный |
Список | Последовательность объектов изменчивой природы | изменчивый |
Кортеж | Последовательность объектов неизменяемой природы | Неизменный |
Улица | Символ/строка | Неизменный |
Поставьте | набор отдельных объектов неупорядоченного характера | изменчивый |
Замороженный | Установить класс неизменяемой природы | Неизменный |
Диктовать | Словарное или ассоциативное отображение | изменчивый |