Az alábbi Python kód miért így viselkedik?
Az l[0][1]=True értékadás hatására [[False, True, False], [False, False, False], [False, False, False]] ez lenne logikus.
Közvetlenül nem a kérdéshez kapcsolódik, de mivel logikátlannak tartom azért írtam ki a kérdést, azonnal egy másik logikátlan dologgal találkoztam:
"
A kérdésed már kiírásra került, a kulcsszó mező kitöltése nem kötelező - ha ki akarod hagyni ezt a lépést, egyszerűen nem kell továbblépned.
A következő mezőket még kötelező megadnod: Add meg itt a kulcsszavakat. "
Ez nem logikátlanság, ez annyi, hogy a Pythonban MINDEN objektum, és mindent referenciaként vesz át. A True és a False is objektum, a lista is objektum, és mikor ezt írod:
for i in range(0,3): result.append(falselist)
Ugyanazt a listát adod hozzá a resulthoz háromszor. Nem ugyanolyan értékűt, hanem pontosan ugyanazt, ugyanannak a listának a referenciáját.
Tehát ha az egyik referencián keresztül megváltoztatod a listát, akkor a többi referencián keresztül is ugyanazt fogod tudni kiolvasni.
Írd így:
for i in range(0,3): result.append(falselist[:])
A falselist[:] készít egy splice-t, egy részlista másolatot, ami itt véletlenül az egész lista lesz.
Általánosabb esetre itt van ez: [link]
Köszönöm.
Függvény paraméter esetén úgy tapasztaltam hogy nem referenciaként történik.
Ez nem igaz.
Még azt is elfogadja hogy f(10), a 10-et mint konstanst a szerint, amit mondasz azt is felülírná.
Az első linkelt kódomhoz nincs más kérdésem, de ha azzal kapcsolatba van valami még amit tudni érdemes még szívesen fogadom.
A másik link: Bocsánat hogy azt feltételeztem hogy nem igaz, ha igaz végképp nem értem.
Az f függvény-el módosítom, a paraméterbe kapott listát, a függvény meghívása után a print mégsem a módosított értéket írta ki. Ez miért van? Miben különbözik attól mintha a lista másolata íródott volna felül és ezért maradt meg a globális változó értéke?
Köszönöm.
>>> def f(a):
... a += 1
Ez esetben is referencia felülírás történik?( "a" egy int).
Igen, de miért nem próbálod ki? Akár interaktívan is.
A x += y Pythonban csak az x = x + y rövidítése, és mint említettem, az értékadás az ilyen dolog, a referenciára vonatkozik.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!