Ich habe in Swift ein wirklich merkwürdiges Verhalten gefunden. Hier ist der Code:Ändern von Array-Elementen in Swift
var array2d: [[Int]] = [[1]]
print(array2d) // prints [[1]]
var first = array2d[0]
first.append(2)
print(array2d) // still prints [[1]]!!!
Ich würde total die letzte Zeile [[1, 2]]
drucken erwarten. Ich kann das aktuelle Verhalten nicht erklären. Ich würde erwarten, array2d[0]
einen Verweis auf das erste Element oder möglicherweise eine Kopie dieser Referenz zurückgeben. In jedem Fall sollte das Ändern dieses Objekts array2d
ändern. Aber das passiert nicht.
Wenn jedoch aktualisiere ich das Array wie folgt aus:
array2d[0].append(2)
es dann [[1, 2]]
druckt, wie erwartet.
Kann mir bitte jemand das erklären?
Mit anderen Worten, es macht eine tiefe Kopie von allem? – Macondo2Seattle