Zmiana zawartości zmiennej
W zależności od tego czy obiekt / struktura danych jest modyfikowalna, czy nie , Python będzie inaczej zachowywał się w sytuacji gdy będziemy chcieli aby zmienna zaczęła wskazywać na inną zawartość
Zmiana przypisania
W przypadku gdy mamy do czynienia z obiektem niemodyfikowalnym (np. krotką) jedyne co Python może zrobić to "przekleić" naszą etykietę (zmienną) na nowy obiekt. Jeśli ten pierwotny nie będzie miał na sobie innej etykietki (nie wskazuje na niego inna zmienna) to zostanie on automatycznie usunięty (przez tzw. garbage collector).
Zmiana zawartości
W przypadku gdy obiekt jest modyfikowalny (np. lista) i dołożymy do niej kolejny element zmienna nie będzie musiała przeskoczyć na nowy obiekt z nową zawartością - po prostu zostanie dodany nowy element (zmieni się zawartość obiektu, etykieta będzie wskazywać ten sam obiekt).
... a czemu to istotne?
Powody są co najmniej dwa:
- Należy pamiętać, że gdy zmieniamy jakiś obiekt modyfikowalny na który wskazuje kilka zmiennych to zmienimy wartości dla każdej z nich.
- Tworzenie obiektów (rezerwowanie miejsca w pamięci dla nich) to proces względnie czasochłonny - stąd też proces kopiowania całego obiektu i dodawania do niego jakiegoś dodatkowego elementu (czyli wariant z obiektem niemodyfikowalnym) może spowolnić działanie tworzonej aplikacji.
-> stąd też tak istotne jest świadome dobieranie struktur danych :) .
Co jest modyfikowalne, a co nie?
typ | modyfikowalny | niemodyfikowalny |
---|---|---|
liczba całk. | tak | |
liczba zmiennop. | tak | |
wart.log | tak | |
ciąg znaków | tak | |
krotka | tak | |
lista | tak | |
słownik | tak | |
zbiór | tak |