在Python中创建备份列表
我想在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
17
一个常见的写法是 y = x[:]
。这个写法会创建一个 x
的浅拷贝,并把它存储在 y
里。
需要注意的是,如果 x
里面有指向其他对象的引用,那么 y
也会指向同样的对象。这可能是你想要的,也可能不是。如果不是的话,可以看看 copy.deepcopy()
。