Listen Sie in Objekteigenschaftsaktualisierungen über alle Objekte derselben Klasse auf [Duplikat]Python

Python-Programme
Anonymous
 Listen Sie in Objekteigenschaftsaktualisierungen über alle Objekte derselben Klasse auf [Duplikat]

Post by Anonymous »

Ich habe versucht, ein physisches Modell mit Python zu erstellen, als ich auf ein unbeabsichtigtes Verhalten von Listen als Eigenschaft von Objekten stieß. Bei der Aktualisierung eines der Elemente in der Liste eines Objekts werden auch die entsprechenden Elemente in anderen Objekten derselben Klasse aktualisiert. Ich habe das folgende minimale Beispiel gemacht, für das dieses Verhalten repliziert wird: < /p>
class testClass:
def __init__(self):
pass
a = [0, 0]
b = 0

def __str__(self):
return f"a = {self.a[0]}, b = {self.b}"

def acc(self, i):
self.b += i

def inc(self, c):
self.a[0] += self.b * c

test = [testClass(), testClass()]

test[0].acc(1)
print(f"object 1: {test[0]}") # object 1: a = 0, b = 1
print(f"object 2: {test[1]}") # object 2: a = 0, b = 0
test[1].acc(2)
print(f"object 1: {test[0]}") # object 1: a = 0, b = 1
print(f"object 2: {test[1]}") # object 2: a = 0, b = 2
test[0].inc(0.3)
print(f"object 1: {test[0]}") # object 1: a = 0.3, b = 1
print(f"object 2: {test[1]}") # object 2: a = 0.3, b = 2 [This is unintended behaviour]
test[1].inc(1)
print(f"object 1: {test[0]}") # object 1: a = 2.3, b = 1 [This is unintended behaviour]
print(f"object 2: {test[1]}") # object 2: a = 2.3, b = 2
< /code>
frustrierend, ich habe dieses Problem nirgendwo online dokumentiert, aber es scheint ein so grundlegendes Problem mit Klassen zu sein. Hat noch jemand damit begegnet? Mache ich etwas wirklich dumm, ohne es zu merken? Jede Hilfe wäre geschätzt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post