为什么列表副本上的操作也不会修改原始列表中的元素?

时间:2017-01-29 18:57:17

标签: python list pointers reference copy

在Python中,一切都应该用指针表示。因此,我希望以下代码也可以修改原始列表a,因为我认为列表copy将包含a中包含的所有原始指针:

import copy

a = ["a", "a"]

copy = copy.copy(a)
for (count, e) in enumerate(copy):
    copy[count] += "b"

print copy
print a

我希望看到["ab", "ab"]。令人惊讶的是,a仅包含["a", "a"],而copy确实包含["ab", "ab"]。使用copy = list(a)也不起作用。

我认为只有在我写copy = copy.deepcopy(a)时才会出现这个结果。

我哪里弄错了?获取列表中所有元素的引用并在镜像列表中修改它们的正确方法是什么?或者它在Python中是不可能的?

1 个答案:

答案 0 :(得分:1)

你很困惑。使用copy.copy的整个目的是创建一个没有引用旧列表的新列表。如果您确实想要保留引用,请不要复制它:

a = ["a", "a"]
copy = a