Kopieren von arrays mit Gleichsetzungszeichen?

3 Antworten

Na, schauen wir uns das doch einfach an, oder?

>>> a=[1,2,3,4]
>>> b=a
>>> id(a)
140565166645312
>>> id(b)
140565166645312
>>> a.append(5)
>>> a
[1, 2, 3, 4, 5]
>>> b
[1, 2, 3, 4, 5]
>>>

Die Zuweisung b=a erzeugt also nur einen neuen Namen mit Referenz auf das gleiche Objekt.

>>> a=[1,2,3,4]
>>> b=a.copy()
>>> a.append(5)
>>> a
[1, 2, 3, 4, 5]
>>> b
[1, 2, 3, 4]

Beim Kopieren, wird ein neues Objekt erzeugt, d.h. a und b sind Bezeichner für unterschiedliche Listenobjekte.

Den Bezug zu c-Arrays sehe ich nicht, außer daß Listen als dynamisches Array von Pointern implementiert sind.

Von Experte ralphdieter bestätigt

Du meinst sowas?

a = [1, 2, 3]
b = a

In dem Fall wird die Referenz der Liste kopiert, anstatt dass eine Kopie der Liste gemacht wird, wie man es vielleicht erwarten würde.

Wenn du nun also an b eine Änderung vornimmst, dann nimmst du diese Änderung gleichzeitig an a vor.

b.append(4)
print(a)  // Ausgabe: [1, 2, 3, 4]

Die Variable beinhaltet nämlich eigentlich garnicht die Liste, sondern nur einen Pointer auf die Liste. Also eine Referenz auf den Speicherplatz, an dem sich die Liste (intern ein C-Array vermute ich mal) befindet.

Durch die Zuweisung b = a ist dann in beiden Variablen die gleiche Referenz auf die selbe Liste gespeichert.

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

Ich kenne mich nicht sehr gut mit Python aus, meiner aber, dass in diesem Fall kein neuer Array erstellt wird, sondern der alte auf seinem bestehenden Speicherplatz weitergenutzt wird ("es wird kein neuer Speicher verbraucht")

Garantieren kann ich das aber leider nicht, c-Arrays kann ich dir auch nicht beantworten. Hoffe das hilft, warte aber mal noch ab, bis jemand qualifizierteres schreibt und mich evtl korrigiert :)

Hallodk 
Fragesteller
 03.12.2022, 21:11

Trotzdem danke für deine Antwort :)

1