Seite 1 von 1
Verständnisfrage Variablen
Verfasst: Donnerstag 11. Juni 2020, 14:56
von 8023
irgendwei bin ich irretiert...
Code: Alles auswählen
#!/usr/bin/python3
#-*- coding: utf-8 -*-
import time
def GO1(data_g1):
data_g1[0] = data_g1[0] + 1
return None
def GO2(data_g2):
data_g2[1] = data_g2[1] + 1
return None
print('\033[=3h\033[2J')
DATA = [0,0]
while True:
GO1(DATA)
print("GO1 ", DATA)
GO2(DATA)
print("GO2 ", DATA)
time.sleep(1)
ergebnis:
Code: Alles auswählen
GO1 [1, 0]
GO2 [1, 1]
GO1 [2, 1]
GO2 [2, 2]
GO1 [3, 2]
GO2 [3, 3]
GO1 [4, 3]
GO2 [4, 4]
ich hätte erwartet das DATA sich nicht ändert. wieso verändert sich DATA obwohl ich das array DATA gar nicht anfasse?
Re: Verständnisfrage Variablen
Verfasst: Donnerstag 11. Juni 2020, 15:01
von __deets__
Weil du nur denkst du fasst es nicht an. Du übergibst die Liste doch als Argument. Und modifizierst die. Was sonst soll passieren?
Re: Verständnisfrage Variablen
Verfasst: Donnerstag 11. Juni 2020, 15:02
von sparrow
Du übergibst die Liste (kein Array) an eine Funktion und machst dort etwas mit ihr.
Code: Alles auswählen
>>> def test_id(anything):
print(f"ID: {id(anything)}")
>>> date = [1, 2, 3]
>>> id(data)
42319232
>>> test_id(data)
ID: 42319232
Re: Verständnisfrage Variablen
Verfasst: Donnerstag 11. Juni 2020, 15:16
von 8023
__deets__ hat geschrieben: Donnerstag 11. Juni 2020, 15:01
Weil du nur denkst du fasst es nicht an. Du übergibst die Liste doch als Argument. Und modifizierst die. Was sonst soll passieren?
ich bin davon ausgegangen, dass nur der inhalt nach data_g übergeben wird und die Funktion verändert nur data_g
Re: Verständnisfrage Variablen
Verfasst: Donnerstag 11. Juni 2020, 15:34
von __deets__
Das ist halt so nicht. Es gibt keine impliziten Kopien in Python. Es gibt unmodifizierbare Strukturen (tupel, frozensets, primitive Typen), aber Listen und Woerterbuecher kannst du veraendern, und das spiegelt sich dann wieder.
Re: Verständnisfrage Variablen
Verfasst: Donnerstag 11. Juni 2020, 15:44
von __blackjack__
@8023: Python kopiert nie von sich aus Werte, das muss man immer explizit machen.
Re: Verständnisfrage Variablen
Verfasst: Donnerstag 11. Juni 2020, 15:57
von 8023
hmmm,... na wieder was gelernt
Danke.
Re: Verständnisfrage Variablen
Verfasst: Donnerstag 11. Juni 2020, 16:07
von __blackjack__
Wobei vielleicht als Einschränkung zu meiner Aussage: Bei einfachen Zuweisungen an Namen mit ``=`` und beim übergeben von Argumenten, was ja im Grunde eine einfache Zuweisung an einen Namen ist.
Bei Zuweisung an Attribute oder per […]-Zugriff kann natürlich alles mögliche passieren, das hat Python ja nicht unter Kontrolle, sondern wer auch immer den Datentyp implementiert hat, dessen Attribut oder Index/Schlüssel man etwas zuweist.