Obiekty zmienne i niezmienne w Python {PRZYKŁADY}

Co to jest obiekt zmienny?

Zmienne w Python można zdefiniować jako przedmiot, który może się zmieniać lub być uważany za coś o charakterze zmiennym. Zmienna oznacza możliwość modyfikacji lub edycji wartości.

Zmienne obiekty w Python umożliwić programistom posiadanie obiektów, które mogą zmieniać swoje wartości. Zwykle służą do przechowywania zbioru danych. Można to uznać za coś, co uległo mutacji i zmienił się stan wewnętrzny obowiązujący w przedmiocie.

Co to są obiekty niezmienne?

Niezmienne obiekty w Python można zdefiniować jako obiekty, które nie zmieniają swoich wartości i atrybutów w czasie.
Obiekty te stają się trwałe po utworzeniu i zainicjowaniu i stanowią kluczową część używanych struktur danych Python.

Python jest używany w liczbach, krotki, ciągi znaków, zestawy zamrożone i klasy zdefiniowane przez użytkownika z pewnymi wyjątkami. Nie mogą się zmienić, a ich wartości pozostają trwałe po ich zainicjowaniu i dlatego nazywane są niezmienialnymi.

In Python, wszystko jest przedmiotem

W Python W języku programowania wszystko można uznać za obiekt składający się z list, liczb całkowitych i funkcji. Cechę tę można porównać z innymi językami programowania obsługującymi obiekty.

Funkcję tę można zweryfikować za pomocą a Python tłumacz, jak pokazano poniżej: –

Python kod:

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))

Wyjście:

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

Ponadto Python udostępnia wbudowaną funkcję o nazwie id, która zwraca adres obiektu obecny w pamięci Python język programowania.

Python kod:

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

Wyjście:

the id of object is 9795360

W powyższym kodzie funkcja id mająca składnię id(obj) podaje adres obiektu w Python pamięć. Tutaj mamy obiekt o nazwie z i ma przypisanie 200. Obiekt z jest następnie przekazywany do funkcji id jako id(z) i Python dostarcza adres obiektu jako 9795360.

Zmienne obiekty w Python

W obiekcie zmiennym wartość obiektu zmienia się w czasie.

W tym przykładzie wyjaśniliśmy zmienne obiekty w Python, a to wykorzystuje listy jako zastosowanie zmiennych obiektów, jak pokazano poniżej: –

Python Kod:

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)

Wyjście:

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

Jak widać w powyższym przykładzie, lista mutable in Python miał wartości 1,2,3. Pierwszy element listy modyfikowalnej zostaje zmieniony z 1 na Guru99 i nie tworzy nowego obiektu po zainicjowaniu nowej wartości.

Tutaj możemy użyć metody id, aby ją wykorzystać. Poniżej zilustrowano użycie metody id dla obiektów zmiennych, jak pokazano poniżej: –

Python Kod:

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))

Wydajność

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

Na poniższym rysunku zilustrowano obiekt zmienny w Python jak pokazano poniżej: –

Zmienne obiekty w Python

Niezmienne obiekty w Python

Niezmienne obiekty w Python to obiekty, których instancje nie zmieniają się w okresie. Niezmienne instancje określonego typu po utworzeniu nie ulegają zmianie, co można zweryfikować za pomocą metody id Python.

Weźmy przykład obiektów typu całkowitego Python który ilustruje koncepcję obiektów niezmiennych w Python jak pokazano poniżej: –

Python Kod:

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))

Wydajność

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

Powyżej widać zmianę w literze „a”. Przeanalizujmy, jak działa mechanizm:

  • Nie ma zmiany wartości obiektu podczas inicjalizacji „a” wartością 344.
  • Zamiast tego tworzony jest nowy obiekt ograniczony literą „a”.
  • Drugi obiekt przypisany jako 244 nie byłby już dostępny.
  • W powyższym przykładzie wykorzystano obiekt typu integer.

Przy a=244 tworzony jest nowy obiekt i odnosi się on do „a”, jak pokazano poniżej: –

Niezmienne obiekty w Python

W poście używającym a=344, jest nowy obiekt, do którego odwołuje się „a”. Poniższy diagram przedstawia to samo: –

Niezmienne obiekty w Python

Dlatego za każdym razem, gdy do nazwy typu int zostanie przypisana nowa wartość, następuje zmiana powiązania nazwy z innym obiektem. Ta sama zasada dotyczy krotek, smyczki, float i Boolean, stąd określane są jako niezmienne.

Implikacje dla kluczy słownikowych w Python

Słowniki można zdefiniować jako uporządkowane kolekcje, które przechowują dane w formacie klucza i nie pozwalają na duplikaty. Słowniki zawierają jeden klucz, do którego dopasowana jest odpowiednia para wartości. Można je zmieniać pod względem typów, a ich zawartość można zmieniać nawet po ich inicjalizacji i utworzeniu.

W dowolnym momencie klawisz wskazuje na jeden konkretny element na raz. Klucze słowników są niezmienne.

Przyjmijmy hipotetyczny scenariusz, jak pokazano poniżej: –

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

Wyjście: – Powyższe Python kod nie daje żadnych danych wyjściowych, a zamiast tego generuje błąd typu typu, którego nie można zaszyfrować. Jest to sytuacja hipotetyczna i nie jest stosowana w Python kompilator.

Tutaj, a definiuje się jako [4,6], a w słowniku definiuje się je jako x. Tutaj, b definiuje się jako [5,6,7], a w słowniku definiuje się je jako y.

  • Klucz „a” ma wartość [4,6] i jest dalej inicjalizowany na x.
  • Klucz „b” ma wartość [5,6,7], która w słowniku jest następnie inicjowana jako „y”.
  • Załóżmy teraz, że wartość 'za' dodaje się cyfry 5 i 7, które stanowią klucz do słownika.
  • Następnie słownik został zmutowany i dawał jedno i drugie 'x' oraz 'y' jako wartości dla powyższego słownika.

Rozważmy następujący scenariusz zilustrowany powyżej: –

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

Dlatego jako język programowania Python sprawia, że ​​klucze słownika są niezmienne, a słowniki są niezmiennymi typami danych.

Wyjątki w niezmienności

Jednakże, Python zapewnia wyjątki od niezmienności, takie wyjątki można zaobserwować dla typu obiektu Tuple. Krotka może być kombinacją zmiennych i niezmiennych typów obiektów. Weźmy przykład, aby wyjaśnić wyjątki w niezmienności, jak pokazano poniżej: –

Python Kod:

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))

Wyjście:

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

W powyższym kodzie widać, że pierwszy element, czyli lista, jest zmienny, natomiast krotka jest niezmienna. Wartości krotki nie można zmienić, ale zawartość listy znajdującej się wewnątrz krotki może zmienić jej wartość.

Dlatego powoduje to wyjątek, że niezmienne obiekty nie zmieniają swojej wartości, ale wartość składników zmienia ich wartość.

Obiekty zmienne a niezmienne

Oto główne różnice między obiektami zmiennymi i niezmiennymi:

Zmienny obiekt Niezmienny obiekt
Stan obiektu można zmienić po utworzeniu Po utworzeniu stanu obiektu nie można zmienić
Obiekty zmienne nie są z natury uważane za bezpieczne dla wątków. Obiekty niezmienne są z natury uważane za bezpieczne dla wątków.
Obiekty zmienne nie są ostateczne, dlatego programista może zmieniać obiekty zmienne i używać tych samych obiektów. Kiedy tworzy się niezmienny obiekt, niezwykle ważne jest, aby klasy były ostateczne

Python Niezmienne typy danych

Klasa Wyjaśnienie Niezmienny lub nie
Bool Wartość logiczna Niezmienny
Int Wartość całkowita (wielkość może być dowolna) Niezmienny
pływak Liczba zmiennoprzecinkowa Niezmienny
Lista Sekwencja obiektów o charakterze zmiennym Zmienny
Krotka Sekwencja obiektów o charakterze niezmiennym Niezmienny
Str Łańcuch znaków Niezmienny
Zestaw zbiór odrębnych obiektów o charakterze nieuporządkowanym Zmienny
Zamrożony zestaw Ustaw klasę o niezmiennym charakterze Niezmienny
Dykt Mapowanie słownikowe lub asocjacyjne Zmienny