A Python támogatja az objektum hivatkozás átadását
Az pass-by-reference és a pass-by-value kétségtelenül a programozási nyelvek közötti átadás paramétereinek két legismertebb és legkönnyebben érthető módja. A Python sajnos „pass-by-object-reference”, sem „Pass by Value”, sem „Pass by Reference”, gyakran „Call by Object Reference”, illetve „Call by Sharing”.„Hasznos alaposabban megvizsgálni magát a koncepciót azáltal, hogy részekre bontja, miközben elmélyül a referencia elhaladásának technikai sajátosságaiban:
Pass: ez azt jelenti, hogy egy metódust argumentummal látunk el.
Referencia alapján: ez azt jelenti, hogy az az argumentum, amelyre átkerül a metódusra, egy változóra utal, amely most a tárolóban található, a változó eltérő replikája helyett.
Amint a metódust referenciának rendeli egy meghatározott változóhoz, a változónak, amelyet megfelel, kifejezetten befolyásolni fogja a referencia összes művelete. Most vegyünk egy példát arra, hogy ez a gyakorlatban hogyan működik. Ebben a példában meghatároztunk egy változót 'arg ' amelynek értéke 4. Ebben a forgatókönyvben a 'változóarg ' nem módosult a helyén. Úgy tűnik, hogy a Python az Ön argumentumát kezeli, ahelyett, hogy a jelenlegi változóra önálló értékként hivatkozna.
Ez azt jelenti, hogy a Hivatkozás helyett a Python az argumentumokat érték szerint mozgatja? A Python az argumentumokat hozzárendeléssel mozgatja, tehát sem hivatkozással, sem értékkel. Ennek logikája kettős:
Jelenleg az átadó paraméter egy objektum mutatója. Bizonyos típusú adatok változtathatóak, és egyesek nem.
Ha egy módosítható objektumot egy funkcióba helyezünk, akkor a függvény hivatkozást kap ugyanarra az objektumra, így mindezt lélek megelégedésére mutathatja; a külső hatókör azonban semmit sem tudna, mielőtt újra csatlakozik a Referenciához a függvényben. Ha elkészült, a külső referencia csak a tényleges objektumra irányul. Ha egy megváltoztathatatlan objektumot áthelyez egy függvénybe, akkor a külső referenciát mindig nem lehet újraragasztani, és nem csak mutálhatja az objektumot. Ahhoz, hogy a dolgok sokkal egyszerűbbek legyenek, értsük meg egyenként.
Pass By Reference
Először is meg kell értened, hogy a 'mylist' változó maga nem lista, hanem egy értékkel rendelkező listára utal. A 'mylist' változót egy olyan tárolónak nevezhetjük, amelynek értékei vannak. A lista értékei objektumok. A 'mylist' változó egyenesen bekerült a függvénybe annak tartalmával.
Úgy tűnik, hogy a „lista” és a „saját listám” is ugyanaz a tárolóváltozó az alábbi kódpéldában, és így ugyanarra a tárolási objektumra vonatkoznak. Ezért a kimenetre nyomtatja a Saeed-et."
A változóval vagy entitással végzett bármilyen művelet azonnal tükröződik a hívó módszerrel. A módszer teljesen módosíthatja a változó értékét, és egy teljesen különálló objektumra irányíthatja. Amint a 'set_list' függvényben láthatja, megváltoztattuk a lista tartalmát, és egy teljesen új listát nyomtattunk az 'Aqsa' elemmel.- Ez azért van, mert a módosított listát visszaküldtük, és a hívóval ugyanazon a vonalon nyomtattuk ki.
A módszer a változó elemeit is átcsoportosíthatja ugyanarra az eredményre, mint az alábbiakban. Láthatja, hogy egy új értéket csatoltunk a listához, és a változás tükröződött. Egy egyedi karakterláncot csatoltunk egy listához, és visszaküldtük a hívónak. Összegzésképpen: a módszer és a hívó ugyanazt a változót és objektumot használta az áthaladás relációjában.
Pass by Value
A pass by value révén a metódus megkapja az argumentum objektum másolatát, amelyet a hívó hozzárendel. Ez biztosítja, hogy az eredeti elem változatlan maradjon, és az összes elvégzett módosítás megmaradjon külön memóriahelyeken ugyanazon objektum másolatában.
Egyformán érvényes a változóval vagy az entitással a módszerrel végrehajtott bármely műveletre. A hívó metódus hatókörében található változók és objektumok duplikátumai teljesen el vannak különítve összefoglalásuk céljából.
Objektum átadása hivatkozással
Ebben a helyzetben, mivel a Python megkülönböztethető, a Python módszerei megkapják a tárolóban nagyon hasonló objektum hivatkozást, amire a hívó hivatkozik. Ezzel szemben a technika nem kapja meg a 'mylist' (a tároló) változót. A hívó módszer ugyanazt az objektumot tárolja; a módszer generálja az ember konténerét, és egy teljesen friss indexet generál a sajátjához, csakúgy, mint a pass-by-value esetében.
A hívó és a metódus ugyanarról az objektumról beszél a tárolóban, de amikor a csatolt módszer külső elemet alkalmaz a listára, a hívó entitás módosul. Több címkéjük van, de ugyanazok a dolgok. Mindkét változó nagyon hasonló objektumot tartalmaz. Ez az az értelem, ami mögött áll a tárgy által történő mozgáshoz való viszony. A tárolóban a metódus és a hívó hasonló objektumot használ, mégis több változón keresztül elkapja őket. A hívó változót (a tárolót) a metódusváltozó (a tároló) semmilyen módosítása nem változtatja meg; csak az adatok vagy a tartalom módosul.
Következtetés
A Python függetlenül működik azoktól a nyelvektől, amelyek elfogadják az elmozdítást hivatkozás vagy argumentumérték alapján. A metódus argumentumok helyi változók, amelyeket a metódushoz átvitt minden értékhez hozzárendeltek. De ez még mindig nem zárja ki, hogy ugyanazokat az eredményeket érje el, mint más nyelveken, miközben argumentumokat proxy útján mozgat.