Променливи и неизменни обекти в Python {ПРИМЕРИ}

Какво е променлив обект?

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

Променливи обекти в Python позволяват на програмистите да имат обекти, които могат да променят своите стойности. Те обикновено се използват за съхраняване на колекция от данни. Може да се разглежда като нещо, което е мутирало и вътрешното състояние, приложимо в даден обект, се е променило.

Какво представляват неизменните обекти?

Неизменни обекти в Python могат да бъдат определени като обекти, които не променят своите стойности и атрибути с течение на времето.
Тези обекти стават постоянни, след като бъдат създадени и инициализирани, и те формират критична част от структурите от данни, използвани в Python.

Python се използва в числа, кортежи, низове, замразени набори и дефинирани от потребителя класове с някои изключения. Те не могат да се променят и техните стойности и остават постоянни, след като бъдат инициализирани и следователно се наричат ​​неизменни.

In Python, всичко е обект

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

Тази функция може да се провери с помощта на a 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 in 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

Неизменни обекти в 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“ с 344.
  • Вместо това се създава нов обект и се ограничава с „a“.
  • Другият обект, присвоен като 244, вече няма да бъде достъпен.
  • Горният пример използва целочислен обект.

При a=244 се създава нов обект и се препраща към „a“, както е показано по-долу: –

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

Публикувайте с a=344, има нов обект, упоменат с „a“. Следващата диаграма представлява същото: –

Неизменни обекти в 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' като стойности за горния речник.

Разгледайте следния сценарий, както е илюстриран по-горе: –

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 Цяло число (големината може да бъде произволна) неизменен
Плувка Число с плаваща запетая неизменен
списък Последователност от обекти с променлива природа непостоянен
Кортеж Последователност от обекти с неизменна природа неизменен
XNUMX Символ / низ неизменен
комплект набор от отделни обекти, които са от неподреден характер непостоянен
Frozenset Задайте клас с неизменна природа неизменен
Dict Речник или асоциативно картографиране непостоянен