...
Ennen
...
kuin
...
tarkastellaan
...
näitä
...
Pythonin
...
kehittyneempiä
...
muuttujia,
...
on
...
syytä
...
tutkia
...
muuttujien
...
muutettavuutta.
...
Kaikki
...
muuttujat
...
Pythonissa
...
ovat
...
joko
...
muutetavia
...
tai
...
muuttamattomia.
...
Kaikki
...
tähän
...
mennessä
...
tarkastellut
...
muuttujat
...
ovat
...
muuttamattomia.
Muuttamattomat muuttujia ei nimensä mukaisesti voi muuttaa. Kaikki niille tehtävät operaatiot eivät muuta niitä, vaan operaatio (esim. kokonaislukujen yhteenlasku) luo uuden muuttujan, pyyhkii vanhan ja asettaa uuden arvon vanhan paikalle. Alkuperäinen arvo ei siis muutu vaan se korvataan.
Muutettava muuttuja sen sijaan voi muuttua. Käytännön seuraus tästä on, että kun kahteen muuttujaan on laitettu sama muutettava arvo, toisen muuttaminen muuttaa molempia. Useimmilla kokoelmilla on sekä muutettava että muuttumaton versio. Muutettavilla muuttuja tyypeillä on vain useampia metodeja arvojen muuttamista varten.
Esimerkiksi lista on monikon muutettava versio. Listalla on samat metodit kuin monikolla. Lista ilmaistaan samalla tavalla kuin monikko, mutta sulkumerkkien sijaan käytetään hakasulkeita.
Code Block |
---|
Muuttamattomat muuttujia ei nimensä mukaisesti voi muuttaa. Kaikki niille tehtävät operaatiot eivät muuta niitä, vaan operaatio (esim. kokonaislukujen yhteenlasku) luo uuden muuttujan, pyyhkii vanhan ja asettaa uuden arvon vanhan paikalle. Alkuperäinen arvo ei siis muutu vaan se korvataan. Muutettava muuttuja sen sijaan voi muuttua. Käytännön seuraus tästä on, että kun kahteen muuttujaan on laitettu sama muutettava arvo, toisen muuttaminen muuttaa molempia. Useimmilla kokoelmilla on sekä muutettava että muuttumaton versio. Muutettavilla muuttuja tyypeillä on vain useampia metodeja arvojen muuttamista varten. Esimerkiksi lista on monikon muutettava versio. Listalla on samat metodit kuin monikolla. Lista ilmaistaan samalla tavalla kuin monikko, mutta sulkumerkkien sijaan käytetään hakasulkeita. {code} [12, 56, 9, 0, 45, 3, 8, 10] >>> [3, 17, 0] * 2 [3, 17, 0, 3, 17, 0] >>> [2, "abcd", True, 7, 90][2] True >>> [2, "abcd", True, 7, 90][1:4] ['abcd', True, 7] >>> {code} |
Lisäksi
...
listaa
...
pystyy
...
muuttamaan
...
sijoittamalla
...
uuden
...
arvon
...
alkion
...
tilalle
...
tai
...
uuden
...
listan
...
leikkauksen
...
paikalle.
...
Metodilla
...
append
...
voi
...
lisätä
...
alkion
...
listan
...
loppuun
...
ja
...
metodilla
...
insert
...
haluttuun
...
kohtaan
...
listaa.
...
Tässä
...
näkyy
...
kuinka
...
listan
...
L1
...
muuttaminen
...
on
...
muuttanut
...
listaa
...
L2.
Code Block |
---|
} >>> L1 = [3, 6, 77] >>> L2 = L1 >>> L2 [3, 6, 77] >>> L1[1] = "abcd" >>> L1 [3, 'abcd', 77] >>> L1.append(12) >>> L1 [3, 'abcd', 77, 12] >>> L1[1:3] = ["www", False, -14] >>> L1 [3, 'www', False, -14, 12] >>> L1.insert(3, 100) >>> L1 [3, 'www', False, 100, -14, 12] >>> L2 [3, 'www', False, 100, -14, 12] >>> {code} |
Listan
...
voi
...
myös
...
sijoittaa
...
itsensä
...
alkioksi,
...
jolloin
...
kyseinen
...
alkio
...
on
...
sama
...
kuin
...
koko
...
lista.
Code Block |
---|
} >>> L1[2] = L1 >>> L1 [3, 'www', [...], 100, -14, 12] >>> L1[2] [3, 'www', [...], 100, -14, 12] >>> L1[2][3] 100 >>> {code} |
Funktiolla
...
list
...
voi
...
muuntaa
...
kokoelman
...
listaksi.
...
Lisäksi
...
sen
...
avulla
...
onnistuu
...
kopion
...
tekeminen
...
olemassa
...
olevasta
...
listasta
...
niin,
...
ettei
...
yhden
...
muuttaminen
...
muuta
...
molempia.
Code Block |
---|
} >>> L1 = [23, 1] >>> L2 = list(L1) >>> L2 [23, 1] >>> L1.append(True) >>> L1 [23, 1, True] >>> L2 [23, 1] >>> {code} |
Joukko
...
on
...
Pythonissa,
...
niinkuin
...
matematiikan
...
joukko-opissa,
...
kokoelma,
...
jossa
...
sama
...
alkio
...
voi
...
esiintyä
...
vain
...
kerran.
...
Joukoille
...
on
...
samoja
...
operaatioita
...
kuin
...
joukko-opissa;
...
unioni
...
|,
...
leikkaus
...
&
...
ja
...
erotus
...
-.
...
Alkioita
...
joukkoon
...
voi
...
lisätä
...
metodilla
...
add
...
ja
...
poistaa
...
metodilla
...
remove,
...
jotka
...
ottavat
...
parametriksi
...
lisättävän/poistettavan
...
alkion
...
arvon.
...
Joukot
...
ilmaistaan
...
samaan
...
tapaan
...
kuin
...
monikot
...
ja
...
listat,
...
mutta
...
niissä
...
käytetään
...
aalltosulkuja.
...
Indeksointi
...
operaattori
...
ei
...
toimi
...
joukoille,
...
koska
...
alkiot
...
eivät
...
ole
...
järjestetty
...
tiettyyn
...
järjestykseen
...
niinkuin
...
listassa.
Code Block |
---|
} >>> S1 = {1, "xy", False, 77} >>> S2 = {22, "abc", 1, 1, False} >>> S1 {False, 1, 'xy', 77} >>> S2 {False, 1, 'abc', 22} >>> S1 | S2 {False, 1, 'abc', 77, 'xy', 22} >>> S1 & S2 {False, 1} >>> S1 - S2 {'xy', 77} >>> S2 - S1 {'abc', 22} >>> {code} |
Tavalliset
...
(siis
...
aaltosulkujen
...
avulla
...
ilmaistavat)
...
joukot
...
ovat
...
muutettavia,
...
mutta
...
funktion
...
frozenset
...
avulla
...
voi
...
tehdä
...
kokoelmista
...
muuttamattomia
...
joukkoja.
...
Vastaavasti
...
funktiolla
...
set
...
saa
...
kokoelmasta
...
tavallisen
...
joukon.
Aaltosulkeita käytetään myös hakurakenteen ilmaisemisessa niinkuin joukossakin. Hakurakenteessa alkioiden sijaan luetellaan avain/arvo pareja kaksoispisteellä erotettuna. Avain tulee kaksoispisteen vasemmalle puolelle; sen pitää olla muuttamaton eikä sama arvo saa esiintyä avaimena kahta kertaa.
Hakurakenne toimii niin, että indeksoitaessa sille annetaan jonkun avaimen arvo ja se palauttaa avaimeen säilötyn arvon. Sijoitettaessa arvon avaimeen indeksoinnilla vanha arvo korvataan uudella. Jos avainta ei ole valmiiksi olemassa, lisätään hakurakenteeseen uusi avain.
Code Block |
---|
Aaltosulkeita käytetään myös hakurakenteen ilmaisemisessa niinkuin joukossakin. Hakurakenteessa alkioiden sijaan luetellaan avain/arvo pareja kaksoispisteellä erotettuna. Avain tulee kaksoispisteen vasemmalle puolelle; sen pitää olla muuttamaton eikä sama arvo saa esiintyä avaimena kahta kertaa. Hakurakenne toimii niin, että indeksoitaessa sille annetaan jonkun avaimen arvo ja se palauttaa avaimeen säilötyn arvon. Sijoitettaessa arvon avaimeen indeksoinnilla vanha arvo korvataan uudella. Jos avainta ei ole valmiiksi olemassa, lisätään hakurakenteeseen uusi avain. {code} >>> D = {"ab" : 12, 100 : "Q", (1, 4) : 22} >>> D["ab"] 12 >>> D[1, 4] 22 >>> D["ab"] = 999 >>> D {'ab': 999, 100: 'Q', (1, 4): 22} >>> D[30] = -12 >>> D {'ab': 999, 100: 'Q', 30: -12, (1, 4): 22} >>> {code} |
Avainsanan
...
in
...
avulla
...
voi
...
testata
...
onko
...
hakurakenteessa
...
tiettyä
...
avainta
...
-
...
ei
...
siis
...
arvoa.
...
Samoin
...
for
...
toistorakenteessa
...
käydään
...
läpi
...
avaimet
...
eikä
...
arvoja.
...
metodi
...
keys
...
palauttaa
...
listan,
...
joka
...
sisältää
...
hakurakenteessa
...
olevat
...
avaimet.
...
Indeksointi arvolla,
...
joka
...
ei
...
vastaa
...
mitään
...
hakurakenteessa
...
olevaa
...
avainta,
...
aiheuttaa
...
virheen.
...
Sen
...
sijaan
...
metodi
...
get,
...
jolla
...
myös
...
voi
...
noutaa
...
avaimen
...
osoittamia
...
arvoja,
...
palauttaa
...
arvon
...
None
...
vastaavassa
...
tapauksessa.