【问题标题】:How to create an immutable list in Python? [duplicate]如何在 Python 中创建不可变列表? [复制]
【发布时间】:2017-01-26 13:39:01
【问题描述】:

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

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] ...

代码应该是什么?

【问题讨论】:

  • @Idos 这回答了标题,但不是真正的问题。

标签: python list variables


【解决方案1】:

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

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)。
【解决方案2】:

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

y = list(x)

而不是y = x

【讨论】:

    猜你喜欢
    • 2019-11-12
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2017-03-26
    • 2021-05-04
    相关资源
    最近更新 更多