Doporucuju se (v Pythonu) vykaslat na koncept "hodnotou" a "odkazem". V Pythonu jsou vsechny "promenne" jenom jmena (s lokalni nebo nelokalni platnosti), ktera odkazuji na nejake objekty v pameti. Ty objekty jsou nebo nejsou mutovatelne a podle toho se s nimi da zachazet. Tudiz se muzes v tech svych prikladech se uplne oprosti od toho, ze volas funkci - to je uplne jedno, ty jenom lokalni promenne (jmenu) uvnitr funkce prirazujes ten objekt, pak v te funkci delas jine veci a pak, pripadne nejakemu jinemu jmenu prirazujes objekt, ktery funkce vraci. Tudiz
def funkce(lst):
lst = lst[1:]
return lst
a = [1,2,3]
b = funkce(a)
lze bez jakehokoli premysleni prepsat na
a = [1,2,3]
b = a[1:]
a
def funkce(lst):
lst.pop(0)
return lst
a = [1,2,3]
b = funkce(a)
prepises mentalne na
a = [1,2,3]
a.pop(0)
b = a
Slice dela novy seznam, pop() modifikuje existujici, vsechno ostatni je jenom prirazovani nejakeho objektu nejakemu jmenu - z logickeho hlediska tam nic jineho neni, fyzicky samozrejme volani funkce ma nejakou rezii apod., ale pro pochopeni to je irelevantni. Vykasli se na predavani hodnotou a odkazem a vsechno ti docvakne.