Wpis z mikrobloga

Mirki z #python #programowanie mam pytanie o listy:

def list_append():
test_list.append(10)
test_list = []
list_append()
print(test_list)
[10]_

Dlaczego lista nie jest pusta? Działa tutaj jak zmienna globalna, nie przekazuje jej do funkcji, a mimo to również poza funkcją ma dodany element '10'.
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@ProfesorBigos: ale jeśli tak samo zdefiniuje sobie test_var = 0 i potem w funkcji będę chciał do niej dodać += 1 bez przekazania jej w argumencie funkcji to nie zadziała. Czemu lista jest zmienną globalną i nie muszę jej przekazywać do funkcji żeby wykonać na niej operacje, a zwykła zmienna już nie?
  • Odpowiedz
@emjot86: x += 10 to jest skrót od x = x + 10. Czyli tworzysz nowy obiekt o typie int i przypisujesz go do zmiennej x, gubiąc w ten sposób obiekt, który wcześniej ta zmienna wskazywała. Tego nie można zrobić ze środka funkcji. W przypadku wywołania metody append(10) nie tworzysz nowego obiektu, tylko modyfikujesz ten co wcześniej. Możesz zmieniać obiekt wskazywany przez zmienną, nie możesz zmieniać na który
  • Odpowiedz
@emjot86: Tzn szczerze mówiąc, to z tym += to uprościłem, bo to działa trochę inaczej :-D listę zmodyfikuje bo to typ mutable, a np tuple stworzy nową bo to typ immutable. Sprawdź sobie:

x = [1,2,3]
y = x
x += [4,5]
  • Odpowiedz