如何在Python中创建不可变列表?

时间:2017-01-26 13:39:02

标签: python list variables

我在程序中遇到变量问题。我需要在循环评估期间保留两个或三个版本的列表。例如:

x=[0]  
y=[0]  
while True:
        y=x  
        x[0]+=1  
        print (y,x)    
        input()

当我按 Enter 时,它显示[1] [1]; [2] [2]; [3] [3]...但我需要将列表的先前状态保留在变量中:[0] [1]; [1] [2]; [2] [3] ...

代码应该是什么?

2 个答案:

答案 0 :(得分:5)

实际上你并不需要一个不可变的列表。你真正需要的是创建真正的复制列表,而不仅仅是复制引用。所以我认为你的问题的答案是:

y = list(x)

而不是y = x

答案 1 :(得分:2)

您需要复制值而不是引用,您可以这样做:

y=x[:]

相反

y = x

您也可以使用副本库:

import copy
new_list = copy.copy(old_list)

如果列表包含对象并且您想要复制它们,请使用通用copy.deepcopy()

new_list = copy.deepcopy(old_list)

在python 3.x中你可以这样做:

newlist = old_list.copy()

你也可以在丑陋模式下完成:)

new_list = list(''.join(my_list))