Variablen überschreiben
Verfasst: Montag 22. Juni 2020, 15:03
Hallöchen,
ich bin auf folgendes "Problem" gestoßen (ich verstehe einfach das "Warum" nicht und wie man hier arbeitet). Man nehme folgende Situation:
Ausgabe:
Passt für mich. Finde ich toll und erwarte ich so.
Nun wandle ich das Szenario um:
Ausgabe:
Hat bestimmt Sinn, ich verstehe aber nicht ganz das "Warum".
=> Warum haben sich sowohl a, als auch b verändert, obwohl ich die set Methode nur bei b anwende?
Ich vermute (und hier könnt ihr mich gerne korrigieren), dass das Objekt (bzw die Klasse) inklusive Zeiger auf den Speicherort zu b kopiert wird und daher sowohl die Variablen a und b in der set Methode angepasst werden. Ist das so ungefähr richtig interpretiert?
Wie würde man vorgehen wenn man das vor hat, was ich im Code versuche zu tun (um das Ziel zu spezifizieren: Ich möchte eine Variable b mit gleichen Properties wie a erzeugen und anschließend einen Wert verändern ohne dabei a zu verändern)
ich bin auf folgendes "Problem" gestoßen (ich verstehe einfach das "Warum" nicht und wie man hier arbeitet). Man nehme folgende Situation:
Code: Alles auswählen
a = 7
b = a
b = 99
print(a)
print(b)
Code: Alles auswählen
7
99
Nun wandle ich das Szenario um:
Code: Alles auswählen
class Test:
def __init__(self, a):
self.__a = a
def getA(self):
return self.__a
def setA(self,a):
self.__a = a
a = Test(7)
b = a
b.setA(99)
print(a.getA())
print(b.getA())
Code: Alles auswählen
99
99
=> Warum haben sich sowohl a, als auch b verändert, obwohl ich die set Methode nur bei b anwende?
Ich vermute (und hier könnt ihr mich gerne korrigieren), dass das Objekt (bzw die Klasse) inklusive Zeiger auf den Speicherort zu b kopiert wird und daher sowohl die Variablen a und b in der set Methode angepasst werden. Ist das so ungefähr richtig interpretiert?
Wie würde man vorgehen wenn man das vor hat, was ich im Code versuche zu tun (um das Ziel zu spezifizieren: Ich möchte eine Variable b mit gleichen Properties wie a erzeugen und anschließend einen Wert verändern ohne dabei a zu verändern)