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

6

我在程序中遇到了一些变量的问题。我需要在循环评估期间保留两到三个版本的列表,该列表会发生变化。例如:

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] ...。应该怎么写代码?

3
@Idos回答了标题,但实际上并没有回答问题。 - glibdud
2个回答

8

在处理时需要复制值而不是引用,可以这样做:

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

在我的特定情况下,在一个带有嵌套列表的真实程序中,只有deepcopy()起了作用。例如:y = deepcopy(x)。 - user7433465

6

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

y = list(x)

与其使用 y = x,不如使用...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接