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.1 VIITAMINE

Viidad ja väärtused

Selles osas avame natuke sügavamalt erinevat tüüpi muutujate ja väärtuste olemust. Mis täpsemalt juhtub, kui muutujale antakse väärtus? Ja mis juhtub siis, kui seda väärtust tahta muuta või sama väärtust anda teisele muutujale?

Muutujale saab väärtuse omistada võrdusmärgi abil. Oleme seda teinud juba meie kursuste algusest peale. Näiteks a = 6 toimel saab muutuja a väärtuseks 6. Harilikult meile sellest teadmisest piisab.

Siiski on huvitav ja mingites olukordades ka vajalik teada, et tegelikult salvestatakse x = 6 toimel muutujasse x hoopis viit objektile, mis tähistab mälus arvu 6.

Seda viita saame me näha täisarvuna funktsiooni id abil.

x = 6
print(id(x))

Väljastatakse arv 1464424800, mis on unikaalne ja konstantne kogu objekti eluea jooksul.

Thonnyl on head võimalused väärtuste ja viitade jälgimiseks.

Kui avada Variables-aken (View --> Variables), siis näeme, et x-i väärtus on 6.

Kui aga avame ka Heap-akna (View --> Heap), siis näeme, et muutuja juures on kirjas hoopis viit ja viida juures väärtus. Natuke segadust võib tekitada see, et funktsioon id andis viidaks 1464424800, aga Thonnys Variables- ja Heap-akendes paistab 0x57495960. Tegelikult on tegemist siiski sama arvuga, 0x57495960 on lihtsalt kuueteistkümnendsüsteemis.

Samamoodi on viidad ja väärtused ka teiste andmetüüpidega. Võtame kasutusele näiteks veel ühe sõne, ühe järjendi ja ühe enniku.

x = 6
sõn = "Tere"
jär = [1, 6, -5]
enn = (5, 7, -7, 8)

Näeme, et Heap-aknas, on rohkem asju, kui ainult muutujate viidad, aga teisi me praegu ei vaata.

Mitmel muutujal sama viit

Kui nüüd teha omistus y = x, siis muutujasse y salvestatakse sama viit ja uut täisarvu objekti ei looda. Samuti on ka teiste andmetüüpide puhul.

x = 6
y = x
sõn = "Tere"
sõn2 = sõn
jär = [1, 6, -5]
jär2 = jär
enn = (5, 7, -7, 8)
enn2 = enn

Jooniselt näeme, millised muutujad viitavad samale objektile.

Sama viidaga muutujaid võib veel rohkem olla.

jär3 = jär2
jär4 = jär2

Mis aga juhtub, kui näiteks anda mingitele uutele muutujatele kohe need samad väärtused?

x = 6
y = x
sõn = "Tere"
sõn2 = sõn
jär = [1, 6, -5]
jär2 = jär
enn = (5, 7, -7, 8)
enn2 = enn
z = 6
sõn_uus = "Tere"
jär_uus = [1, 6, -5]
enn_uus = (5, 7, -7, 8)

Näeme, et arvu ja sõne puhul on nüüd viit ikka sama, aga järjendi ja enniku puhul mitte. Sama näiteks ka tühja enniku puhul on erinevate muutujate korral viit sama.

tühi_ennik = ()
tühi_ennik2 = () 

Järjendi korral aga ei juhtu seda kunagi. Räägime sellest lähemalt järgmise peatüki lõpus.


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