re.sub还会更改以前复制的字符串列表

时间:2017-01-31 07:56:59

标签: python list replace

自从我使用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)

2 个答案:

答案 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)