Dlaczego tak się dzieje przy zmienianiu listy w funkcji?

0

Cześć!
Załóżmy taki kod

def change(l):
    x = [5, 6, 7, 8]
    l = x

def change_one(l):
    l[0] = 69
    l[1] = 420
    l[2] = 2137

def main():
    l = [1, 2, 3, 4]
    print(l)
    change(l)
    print(l)
    change_one(l)
    print(l)
    
main()

po wykonaniu otrzymamy:

[1, 2, 3, 4]
[1, 2, 3, 4]
[69, 420, 2137, 4]

Dlaczego?

4

Listę przekazujesz do funkcji przez referencję. Jeśli zmienisz element listy przez tę referencję, element zostanie zmieniony nazewnątrz. Jednak jeśli piszesz l=x to do zmiennej l(argumentu) zostanie przypisana nowa lista, a lista wskazywana oryginalnie przez l zostanie bez zmian.

2

[69, 420, 2137, 4] ( ͡° ͜ʖ ͡°)

Kolega wyżej Ci wyjaśnił. W pythonie przekazuje się przez referencje a nie przez wartość. dopóki nie zrobisz kopii listy, to będziesz bazował na jednym i tym samym elemencie.

0

Może napisz czego byś się spodziewał, bo jak na razie nie rozumiem chyba pytania.

0

Aaa, to dopisz sobie l = przed change(l). I returna w tej funkcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1