Kopien und Ansichten in NumPy
Eine Kopie ist eine vollständige Kopie der Daten. Wenn wir die Kopie ändern, wirkt sich das nicht auf die Originaldaten aus; sie befinden sich nicht an derselben physischen Speicherstelle.
Eine Ansicht ist ein Alias oder eine Referenz auf die Daten. Über diesen Alias oder diese Referenz können Sie auf die Originaldaten zugreifen und sie bearbeiten, aber es wird keine Kopie der Originaldaten erstellt. Wenn wir die Ansicht ändern, wirkt sich das auf die Originaldaten aus; sie befinden sich an derselben physischen Speicherstelle.
Ansichten treten im Allgemeinen in den folgenden Fällen auf:
- 1. NumPy-Slice-Operationen geben eine Ansicht der Originaldaten zurück.
- 2. Der Aufruf der ndarray-Funktion view() erzeugt eine Ansicht.
Kopien treten im Allgemeinen in den folgenden Fällen auf:
- Python-Sequenz-Slicing-Operationen und der Aufruf der Funktion deepCopy().
- Der Aufruf der ndarray-Funktion copy() erzeugt eine Kopie.
Keine Kopie
Eine einfache Zuweisung erstellt keine Kopie des Array-Objekts. Stattdessen verwendet sie dieselbe id() wie das ursprüngliche Array, um darauf zuzugreifen. id() gibt eine generische Kennung für ein Python-Objekt zurück, ähnlich einem Zeiger in C.
Darüber hinaus wirken sich Änderungen an einem Array auf das andere Array aus. Wenn Sie beispielsweise die Form eines Arrays ändern, ändert sich auch die Form des anderen Arrays.
Beispiel
Das Ausgabeergebnis ist:
我们的数组是: [0 1 2 3 4 5] 调用 id() 函数: 4349302224 a 赋值给 b: [0 1 2 3 4 5] b 拥有相同 id(): 4349302224 修改 b 的形状: [[0 1] [2 3] [4 5]] a 的形状也修改了: [[0 1] [2 3] [4 5]]
Ansicht oder flache Kopie
Die Methode ndarray.view() erstellt ein neues Array-Objekt. Das Ändern der Dimensionen des von dieser Methode erstellten neuen Arrays ändert nicht die Dimensionen der Originaldaten.
Beispiel
Das Ausgabeergebnis ist:
数组 a: [[0 1] [2 3] [4 5]] 创建 a 的视图: [[0 1] [2 3] [4 5]] 两个数组的 id() 不同: a 的 id(): 4314786992 b 的 id(): 4315171296 b 的形状: [[0 1 2] [3 4 5]] a 的形状: [[0 1] [2 3] [4 5]]
Die Verwendung von Slices zum Erstellen von Ansichten und das Ändern von Daten wirken sich auf das ursprüngliche Array aus:
Beispiel
Das Ausgabeergebnis ist:
我们的数组: [ 0 1 2 3 4 5 6 7 8 9 10 11] 创建切片: [ 0 1 2 3 123 234 6 7 8 9 10 11] 4545878416 4545878496 4545878576
Die Variablen a und b sind beide Ansichten von Teilen von arr. Änderungen an den Ansichten spiegeln sich direkt in den Originaldaten wider. Wenn wir jedoch die IDs von a und b betrachten, sind sie unterschiedlich. Das heißt, obwohl Ansichten auf die Originaldaten verweisen, unterscheiden sie sich dennoch von Zuweisungsreferenzen.
Kopie oder tiefe Kopie
Die Funktion ndarray.copy() erstellt eine Kopie. Das Ändern der Daten der Kopie wirkt sich nicht auf die Originaldaten aus; sie befinden sich nicht an derselben physischen Speicherstelle.
Beispiel
Das Ausgabeergebnis ist:
数组 a: [[10 10] [ 2 3] [ 4 5]] 创建 a 的深层副本: 数组 b: [[10 10] [ 2 3] [ 4 5]] 我们能够写入 b 来写入 a 吗? False 修改 b 的内容: 修改后的数组 b: [[100 10] [ 2 3] [ 4 5]] a 保持不变: [[10 10] [ 2 3] [ 4 5]]
Weitere verwandte Artikel
Analyse von direkter Zuweisung, flacher Kopie und tiefer Kopie in Python
Andere Erweiterungen