Arvutiteaduse instituut
  1. Kursused
  2. 2023/24 sügis
  3. Programmeerimine (LTAT.SO.001)
EN
Logi sisse

Programmeerimine 2023/24 sügis

  • Pealeht
  • 1. Sissejuhatus
  • 2. Tingimuslause
  • 3. Tsükkel
  • 4. Järjend ja for-tsükkel
  • 5. Funktsioon
  • 6. Andmevahetus. Lihtne kasutajaliides
  • 7. Kahemõõtmeline järjend. Kahekordne tsükkel
  • 8. Kordamine 1. kontrolltööks?
  • 9. Kontrolltöö?
  • 10. Viitamine ja muteerimine
  • 11. Andmestruktuurid
  • 12. Rekursioon ja andmetöötlus
  • Projekti esitamine ja esitlused
  • 13. Objektorienteeritud programmeerimine
  • 14. Kordamine 2. kontrolltööks?
  • 15. Kontrolltöö 2?
  • Loengud
  • Moodle
  • Lahendus
  • Thonny paigaldamine
  • Thonny logide esitamine
  • Kiireksamist
  • Viited
< eelmine10. nädala sisukordjärgmine >

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.


< eelmine10. nädala sisukordjärgmine >
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused