在Python中创建备份列表

5 投票
3 回答
903 浏览
提问于 2025-04-16 18:11

我想在Python中创建一个列表的备份列表。下面是代码的一个例子。

x = [1,2,3]  
y = x  
x.pop(0)  

print y

不过,这样做的结果是 y = [2,3],而我想要的结果是 [1,2,3]。我该怎么做才能让y列表和x列表互不影响呢?

3 个回答

1

虽然aix给出的答案是最简洁的,但为了完整性,你也可以这样做:

y = list(x)

这样会强制创建一个新的列表,而且能很清楚地表达你想要做的事情。我自己也可能会这样做。不过要注意,这样并不会创建一个深拷贝(也就是说,所有元素都是同一个引用)。

如果你想确保y完全不被改变,可以把它变成一个元组——这样就不能删除或添加元素。如果你想这样做:

y = tuple(x)

作为最后一种选择,你可以这样做:

y = [a for a in x]

这就是用列表推导式来复制的方式(而且非常适合进行基本的转换或过滤)。所以,实际上你有很多选择。

5

这里有一种方法可以做到:

import copy

x = [1,2,3]
y = copy.deepcopy(x)
x.pop(0)
print x
print y

来自这个文档

17

一个常见的写法是 y = x[:]。这个写法会创建一个 x 的浅拷贝,并把它存储在 y 里。

需要注意的是,如果 x 里面有指向其他对象的引用,那么 y 也会指向同样的对象。这可能是你想要的,也可能不是。如果不是的话,可以看看 copy.deepcopy()

撰写回答