Institute of Computer Science
  1. Courses
  2. 2023/24 spring
  3. Introduction to Programming II (MTAT.03.256)
ET
Log in

Introduction to Programming II 2023/24 spring

  • Kursuse info
  • 1. Kahemõõtmeline järjend
  • 2. Kahekordne tsükkel
  • 3. Andmestruktuurid
  • 4. Viitamine ja muteerimine

4.1 Viitamine 4.2 Muteerimine 4.3 Järjendi muteerimine 4.4 Funktsioon ja muteerimine 4.5 Kordamine

  • 5. Testimine ja silumine. Rekursioon
  • 6. Rekursioon II
  • 7. Objektorienteeritud programmeerimine
IV OSA sisukord

4.2 MUTEERIMINE

Me oleme oma kursuste jooksul ikka mingite muutujate väärtust muutnud. Juba termin muutuja isegi viitab muutumisele.

a = 5
a = 7
a += 4

Vaatame nüüd sedagi aspekti mõnevõrra sügavamalt.

a = 5
print(id(a))
a = 7
print(id(a))
a += 4
print(id(a))

annab tulemuseks (näiteks):

1464424784
1464424816
1464424880

Näeme, et iga omistamisega salvestati muutujasse a uus viit, mis siis viitab ka uuele objektile.

Mis juhtub, kui esimese omistamise järel antakse sama viit ka teisele muutujale?

Ülesanne


Ka viitade vaatamine kinnitab, et a ja b lähevad pärast muutujale a uue väärtuse andmist kumbki oma teed.

a = 5
b = a
print(id(a))
print(id(b))
a = 7
print(id(a))
print(id(b))

Seega võib öelda, et muutuja a sai uue väärtuse - vana väärtus oli 5 ja uus on 7. Samas seda väärtust 5 mälu täisarvulise objektina ei muudetud. Nüüd on muutujasse a salvestatud uus viit, mis viitab täisarvulisel objektile väärtusega 7. Päris hävingule see väärtusega 5 objekt ka mõeldud pole, sest muutujas b olev viit jääb talle viitama.

Samamoodi juhtus ka a += 4 korral - uus väärtus uue viidaga.

Niisiis tegelikult pole täisarvu võimalik muuta. Kui seda tahaksime teha, siis tegelikult võetakse kohe uus objekt, mitte ei “parandata” vana. Sedalaadi andmetüüpe nimetatakse mittemuteeritavateks. Kui mingi objekt on loodud, siis selliseks ta jääb kogu oma eksisteerimise aja. Kui ta sellisena enam vajalik pole, siis visatakse ära. Eks nii kipub päriseluski tänapäeval mitmete asjadega olema.

Sõnu muteeritav, mittemuuteritav ja muteerima Õigekeelsussõnaraamatus pole. Samas on seal sõnad muteeruma ja mutatsioon. Seega kui me midagi muteerime, siis see asi muteerub ja toimub mutatsioon. Eks võiks ka tavakeelsemalt muutmisest, muutumisest ja muutusest rääkida, aga programmeerimises kasutatakse täpsuse eesmärgil siiski veidi võõrapärasemaid termineid nagu ka Aivar Annamaa programmeerimise õpikus.

Mittemuteeritavad (ingl immutable) on näiteks arvud, sõned, ennikud ja tõeväärtused. Muteeritavad (ingl mutable) on aga näiteks järjendid, hulgad ja sõnastikud. Muteeritavate objektide puhul on olemas võimalused nende muutmiseks - muteerimiseks. Näiteks saab elemente lisada, eemaldada ja välja vahetada.

Eelmise alapunkti lõpus jäi õhku selgitus, et miks arvude, sõnede ja ennikute puhul, vähemalt mingitel juhtudel, antakse viit samale objektile ka siis, kui muutujatpidi (b = a) omistamist pole. Nt

c = 6
d = 6

Nimelt võidakse mittemuteeritavate tüüpide korral nii korraldada, et ükskõik millisele muutujale vastav väärtus antakse, siis see võetakse samast kohast mälus, seega viit on sama. Kuna neid väärtusi nagunii muuta ei saa, siis pole muret sellega, et mingile väärtusele erinevate (ka omavahel seostamata) muutujate poolt viidatud on.


IV OSA sisukord
  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment