изменчивость и неизменность объектов в python

Изменяемость и неизменяемость объектов в python имеют большое значение для нашей программы в python. Прежде чем перейти непосредственно к концепции, давайте разберемся с небольшим фрагментом кода (оператор приращения) в python.

Если я напишу строку кода как

demo_variable = 77
demo_variable = 33
demo_variable = demo_variable + 1 

Давайте разберем этот код шаг за шагом, а затем выясним, что на самом деле происходит.

demo_variable = 77

Когда указанная выше строка выполняется.

Целочисленный объект 77 создается по некоторому адресу памяти (при условии, что он равен 0x2000).

demo_variable = 77
demo_variable = 33

Когда приведенный выше код выполняется.

demo_variable заменяется ссылкой на адрес памяти, где находится целочисленный объект 33.

demo_variable = 77
demo_variable = 33
demo_variable = demo_variable + 1 

Python вычисляет выражения слева направо. Но при оценке задания правая часть оценивается раньше левой.

Таким образом, вычисляется demo_variable +1, а затем

demo_variable заменяется ссылкой на адрес памяти, где находится вновь созданный целочисленный объект 34.

Простыми словами, мы можем сделать вывод, что

Значение внутри целочисленных объектов никогда не может быть изменено в python

что означает, что целочисленный объект не является изменяемым.

Что такое изменчивость?

Любой объект имеет связанные с ним данные (состояние) и тип, которые расположены по некоторому адресу памяти.

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

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

Теперь, если бы я хотел изменить Player_name во внутреннем состоянии объекта,

Адрес памяти (ссылка) переменной sports_player не изменился, но данные (внутреннее состояние объекта) был изменен.

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

Проще говоря, эти объекты создаются в памяти по какому-то адресу памяти, но внутренние данные которых мы никогда не можем изменить (внутреннее значение), называются неизменяемыми.

Целые числа, числа с плавающей запятой, логические значения, строки, кортежи и замороженные множества неизменяемы.

Списки, наборы и словари изменяемы

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

Кортежи могут быть ИЗМЕНЯЕМЫМИ, если

Кортежи по умолчанию неизменяемы, но они становятся изменяемыми, если элементы кортежа изменяемы.

Пример 1

sample_tuple = ("first","second","third")

Здесь переменная sample_tuple ссылается на объект кортежа,

который содержит данные и находится по каком-то адресу памяти (при условии, что 0x2015). В этом примере и кортеж, и элементы в нем имеют тип Immutable.

Если я изменю код в своей программе как

sample_tuple = ("Kohli",18,"Dhoni",7)

затем этот sample_tuple ссылается на этот вновь созданный объект

потому что кортеж неизменяемый и элементы в нем тоже неизменяемого типа.

Питонический способ

Пример 2

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

sample_tuple = (['football','cricket'],['Ronaldo','Dhoni'],7)

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

Если бы я хотел добавить еще несколько элементов в списки, присутствующие внутри кортежа, возможно ли это? — ДА, возможно. Но выше обсуждалось, что кортежи неизменяемы, тогда как это возможно? Поскольку объект списка является изменяемым.

sample_tuple[0].append('golf')
sample_tuple[1].append('Woods')

объект кортежа был изменен в том же месте памяти (при условии, что 0x2020)

кортеж,который имееттип неизменный, стализменяемым из-за наличия в нем изменяемых элементов.

Питонический способ

Это доказывает, что кортежи изменяемы, если элементы в них изменяемы.

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.