Dlaczego tak się dzieje przy zmienianiu listy w funkcji?

Dlaczego tak się dzieje przy zmienianiu listy w funkcji?
S7
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 363
0

Cześć!
Załóżmy taki kod

Kopiuj
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:

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

Dlaczego?

elwis
  • Rejestracja: dni
  • Ostatnio: dni
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.

ledi12
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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.

PaulGilbert
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1027
0

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

PaulGilbert
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1027
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.