自从我使用Python以来已经有一段时间了,而这个我真的没有得到: - 我列出了M1的字符串 - 我把它复制到M2 - 然后我换了一个" e"到" E"在M1中使用re.sub - M2也改变了!
这里有一些感兴趣的代码。它在Anaconda2和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)
答案 0 :(得分:1)
m2 = m1
使m2指向m1指向的同一个对象。它就像你在复制指针一样。
如果要复制内容,可以执行m2 = m1[:]
。
答案 1 :(得分:1)
m2 = m1为您提供m1的浅表副本,这只是一个参考。
你需要深层复制。
请参阅https://docs.python.org/3/library/copy.html
import copy
m1 = "Hello."
m2 = copy.deepCopy(m1)