Es ist eine Weile her, seit ich Python verwendet habe, und dieses bekomme ich wirklich nicht: - Ich mache eine Liste von Strings M1 - Ich kopiere es auf M2 - Dann ändere ich ein "e" auf "E" mit re in M1 - M2 wird auch geändert!Re ändert auch die zuvor kopierte Liste der Strings
Hier ist ein Code für diejenigen, die interessiert sind. Es zeigt dieses Verhalten auf Anaconda2 und Python 3.6.0.
import re
# Normal operation on single strings
m1 = "Hello."
m2 = m1
m1 = re.sub("e", "E", m1)
print(m1)
print(m2)
print("")
# Normal operation on one list of strings
M = ["Hello.", "Bye-bye!"]
for i in range(len(M)):
M[i] = re.sub("e", "E", M[i])
print (M)
print("")
# Unexpected behaviour on a copied list of strings
M1 = ["Hello.", "Bye-bye!"]
M2 = M1
for i in range(len(M1)):
M1[i] = re.sub("e", "E", M1[i])
print(M1)
print(M2)
M2 = M1 nicht eine neue Zeichenfolge mit dem gleichen Inhalt liefert, seinen nur einen Verweis auf die alte Zeichenfolge. Verwenden Sie zum Beispiel deepcopy() – Humbalan
Super! Ich hatte keine Ahnung, dass Python mit solchen Zeigern arbeitet. Zeit, etwas Python-Theorie für mich zu lesen, denke ich. – user3766450