Odgovor na to se moze naci u tome kako ko shvata pojam "prenos varijable preko reference" - u pythonu, sve varijable su interno prezentovane kao adrese (ka delu memorije gde su cuvane) i te adrese se prenose preko vrednosti te adrese. To se moze shvatiti i kao prenos vrednosti a i kao prenos reference (adresa je referenca). U oba slucaja, znaci istu stvar. Ergo, obe tvrdnje sa pocetka moje poruke izgledaju kao tacne (zavisno kako ko shvata pojam reference).
Dalje, pojam prenosa varijabli u python jeziku je specifican. Govorimo o imenima i dodeli - kada se varijabla dodeli funkciji kao argument, to je u sustini dodela vrednosti varijable novom imenu varijable (u lokalnom namespace-u funkcije), tako da ce to novo ime da ima vrednost originalnog objekta. Kada izvrsimo dodelu nove vrednosti tom imenu u samoj funkciji, to ime se jednostavno vezuje za novu vrednost.
Sad, konfuzija nastaje kod Python tipova - python sadrzi mutable i imutable tipove. Python imutable tipovi (kao sto se vidi u gorespomenutim primerima) se ne mogu menjati i vezivanje nove vrednosti fakticki kreira novi imutable objekat sa novom vrednoscu, i originalan objekat se ne menja, dok se mutable tipovi (list, dict i objekti) mogu menjati u funkcijama u kojima su preneti (jer je promena vrednosti vidljiva svim imenima/varijablama kojima je dodeljena ta vrednost!).
No, s obzirom na prirodu python jezika, ova konfuzija i ne bi trebalo da bude problem, jer sâm jezik maltene forsira programera da postuje OO principe programiranja.
Na python mailing listi se moze naci veliki broj diskusija na tu temu i ima dosta veoma kvalitetnih objasnjenja, ukoliko zelite vise informacija.
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x