Python: typy mutable, immutable i metoda copy()

9-Mar-2020

W Pythonie występują typy mutable i immutable.

Immutable – niezmienne – typy takie jak int, float, bool, str. Zmienna wskazuje na komórkę w pamięci, ale kiedy do tej zmiennej wstawiasz nową wartość, to dla zmiennej rezerwuje się nową komórkę i tam przechowuje się jej wartość. Funkcja id() pozwala zmieniać adres tej komórki. W skrypcie poniżej początkowo i oraz new_i wskazują na tą samą wartość komórki, ale potem, po zmianie i, funkcja id() zwraca inne wartości dla każdej zmiennej. Immutable – wartość komórki pamięci się nie zmienia

Mutable – zmienne – typy takie jak listy, zbiory, słowniki. Zmienna wskazuje na pewne miejsce w pamięci. Jeśli zmienia się wartość zmiennej (np. dodaje element do listy), to adres komórki zostaje ten sam, ale zmienia się zawartość struktury pamięciowej. Tutaj box i new_box, to właściwie to samo. Funkcja id() zwraca dokładnie ten sam identyfikator. Jeśli do box dodasz nowy element, to pojawi on się też w new_box. Mutable – wartość komórki pamięci się zmienia:

Takie działanie typów mutable bywa niekiedy niepożądane i dlatego mamy do dyspozycji funkcję copy(). Ta metoda bierze oryginalny obiekt z pamięci i kopuje go w inne miejsce w pamięci, tworząc nową zmienną. Funkcja id() wywoływana dla zmiennej utworzonej poprzez copy() zwróci inną wartość, a co za tym idzie oba obiekty są różnymi obiektami i można je modyfikować niezależnie:

Dodaj komentarz:

Autor: Rafał Kraik