*Množice in spremenljivke tipa set

Podobno kot pri spremenljivkah tabelaričnega tipa tudi spremenljivka tipa set dejansko vsebuje zgolj kazalec na množico (njen pomnilniški naslov), ne pa množice same. V večini primerov se nam tega dejstva sicer ni treba zavedati (zato ponavadi govorimo kar o »množici a«, ne pa – kar bi bilo pravilneje – o »množici, na katero kaže spremenljivka a«), včasih pa nas lahko neprijetno preseneti. Oglejmo si primer (in ga izvedimo):

Izvedi Počisti



Čeprav smo sedmico dodali zgolj množici a, se je »čudežno« pojavila tudi v množici c. V resnici se pri prirejanju c = a v spremenljivko c skopira zgolj kazalec na množico, na katero kaže spremenljivka a. Spremenljivki a in c torej kažeta na isto množico:

Če bi želeli ustvariti kopijo množice a, bi morali uporabiti stavek c = a.copy().

Kakšna pa je razlika med stavkoma a = a.intersection(b) in a.intersection_update(b), o kateri smo govorili? Stavek a = a.intersection(b) izdela novo množico kot presek obeh množic in s spremenljivko a pokaže nanjo. V našem primeru bi bilo to videti nekako takole:


Spremenljivki a in c sedaj ne kažeta več na isto množico!

Stavek a.intersection_update(b) pa spremeni množico, na katero kaže spremenljivka a. Takole:

Spremenljivki a in c še vedno kažeta na isto množico.

Seveda velja enako tudi za para funkcij union in update ter difference in difference_update.

Vaja