изменчивость и неизменность объектов в 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 .
Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.