Przede wszystkim pozdrawiam wszystkich.
Jestem początkującym "pythonerem". Myślałem, że ogarniam funkcję, ale ostatnio coś mnie zadziwiło w moim programie.
Mianowicie mam funkcję:
https://pastebin.com/raw/De0NFdBL
def funkcja(b, c):
b = 10
c[0] = 10
print("b lokalnie", b)
b = 5
c = [5,5,5]
funkcja(b, c)
print(b)
print(c)
No i funkcja działa tak jak powinna. Lista jest mutowalna i ją zmieni, zmienna b cały czas pozostaje niezmieniona poza funkcją. No i OK.
Ale potrzebowałem zmienić w inny sposób listę za pomocą funkcji. Więc ją skopiowałem do listy "pomocniczej". Zmieniłem pomocniczą. I potem z powrotem skopiowałem listę główną, ale ona nie została zmieniona. Dlaczego?
https://pastebin.com/raw/A0DJMzbZ
def funkcja(c):
copy = c[:]
copy[0] = 10
print("Kopia: ", copy)
c = copy[:]
c = [5,5,5]
funkcja(c)
print(c)
ShalomiksdeShalom2
te nawiasy oznaczają tuple a nie argumenty funkcji, więc nie ma zadnych błędów.iksdeid(c)
w miejscu, gdzie chcesz wypisaćid(copy)
, przez co błędnie dochodzisz do wniosku, żecopy = c[:]
nie tworzy kopii, a jest ona tworzona dopiero w momencie dokonania jakiejś operacji nacopy
. zobacz: https://ideone.com/6zvGs5Shalom