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

use*_*465 4 python variables list

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

x=[0]  
y=[0]  
while True:
        y=x  
        x[0]+=1  
        print (y,x)    
        input()
Run Code Online (Sandbox Code Playgroud)

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

代码应该是什么?

omr*_*don 6

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

y=x[:]
Run Code Online (Sandbox Code Playgroud)

反而

y = x
Run Code Online (Sandbox Code Playgroud)

您还可以使用复制库:

import copy
new_list = copy.copy(old_list)
Run Code Online (Sandbox Code Playgroud)

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

new_list = copy.deepcopy(old_list)
Run Code Online (Sandbox Code Playgroud)

在 python 3.x 中,您可以执行以下操作:

newlist = old_list.copy()
Run Code Online (Sandbox Code Playgroud)

你也可以在丑陋的模式下做到这一点:)

new_list = list(''.join(my_list))
Run Code Online (Sandbox Code Playgroud)


run*_*g.t 5

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

y = list(x)
Run Code Online (Sandbox Code Playgroud)

而不是y = x.