![]() | 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
.
![](https://courses.cs.ut.ee/2021/progalused2/spring/Main/PART4A?action=download&upname=viidad1a.png)
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.
![](https://courses.cs.ut.ee/2021/progalused2/spring/Main/PART4A?action=download&upname=thonnyviitab2.png)
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)
![](https://courses.cs.ut.ee/2021/progalused2/spring/Main/PART4A?action=download&upname=thonnyviitab3.png)
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.
![](https://courses.cs.ut.ee/2021/progalused2/spring/Main/PART4A?action=download&upname=viidadskeem.png)
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 | ![]() |