Enakost oziroma enoličnost

Pomen besede »isti« se zdi povsem jasen, dokler mu ne posvetimo malce več pozornosti in ugotovimo, da ni vse tako jasno, kot smo sprva pričakovali. Na primer, če rečemo, »Anže in Brina imata isti avto«, mislimo, da imata oba isti model in znamko avtomobila, vendar gre za dva različna avtomobila. Če pa rečemo, »Anže in Brina imata isto mater«, mislimo, da je njegova in njena mati ista oseba.

Na podobne težave naletimo pri objektih. Na primer, če sta dve točki enaki, ali to pomeni, da gre za dva različna objekta, ki vsebujeta iste podatke (koordinate), ali da gre dejansko za isti objekt?

Operator is nam omogoča, da ugotovimo, ali se dva sklica nanašata na isti objekt:

>>> t1 = Tocka(4, 3)
>>> t2 = Tocka(4, 3)
>>> t1 is t2
False

Čeprav t1 in t2 vsebujeta enake koordinate, nista isti objekt. Če priredimo t1 spremenljivki t3, potem ti dve spremenljivki predstavljata različni imeni za isti objekt:

>>> t3 = t1
>>> t1 is t3
True

Tako vrsto enakosti imenujemo plitva enakost (ang. shallow equality), saj primerja samo sklice, ne pa dejanske vsebine objektov. Če želimo primerjati vsebino objektov – globoko enakost (ang. deep equality) – lahko napišemo funkcijo iste_koordinate:

def iste_koordinate(t1, t2):
  return (t1.x == t2.x) and (t1.y == t2.y)


Če sedaj ustvarimo dva različna objekta, ki vsebujeta enake podatke, lahko uporabimo funkcijo iste_koordinate, da preverimo, ali objekta predstavljata točki z enakima koordinatama:

>>> t1 = Tocka(4, 3)
>>> t2 = Tocka(4, 3)
>>> iste_koordinate(t1, t2)
True

Če se dve spremenljivki sklicujeta na isti objekt, potem sta tako plitvo, kot tudi globoko enaki.

Izvedi Počisti