Die gleichen Adressen - Sie können dies mit id
überprüfen. Wenn die Elemente der Liste änderbar sind, ändert das Ändern der anderen die andere. Wenn die Elemente der Liste unveränderlich sind, können Sie sie nicht ändern.
li = [1, 1.0, None, ['a', 'b'], ('c', 'd')]
li.extend(li[-2:])
print(li)
# outputs [1, 1.0, None, ['a', 'b'], ('c', 'd'), ['a', 'b'], ('c', 'd')]
li[-2].pop()
print(li)
# outputs [1, 1.0, None, ['a'], ('c', 'd'), ['a'], ('c', 'd')]
# Note that elemnts at indices -2 and -4 have changed since id(li[-2]) == id(li[-4])
print(id(li[-1]) == id(li[-3]))
# True
tiefe Kopien hinzuzufügen, können Sie die copy module verwenden können.
li = [1, 1.0, None, ['a', 'b'], ('c', 'd')]
li.extend(list(map(copy.deepcopy, li[-2:])))
print(li)
# outputs [1, 1.0, None, ['a', 'b'], ('c', 'd'), ['a', 'b'], ('c', 'd')]
li[-2].pop()
print(li)
# outputs [1, 1.0, None, ['a', 'b'], ('c', 'd'), ['a'], ('c', 'd')]
# Note that only the list at index -2 has changed since id(li[-2]) != id(li[-4])
Beachten Sie, dass für unveränderliche Objekte, copy.deepcopy
keine Kopie des Objekts machen, es sei denn, dass Objektverweise auf andere veränderbare Objekte hat. Also in der letzten Liste id(li[-1]) == id(li[-3])
.
Ein anderer Teil meiner Frage ist: "Gibt es eine Möglichkeit, dies zu tun, so dass eine echte Kopie gemacht wird?" – jackskis
@jackskis aktualisiert – Alex
Vielen Dank! – jackskis