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