【问题标题】:Creating a back-up list in python在python中创建一个备份列表
【发布时间】:2011-05-23 17:31:41
【问题描述】:

我想在 python 中创建另一个列表的备份列表。这是代码示例。

x = [1,2,3]  
y = x  
x.pop(0)  

print y

然而,当我希望它产生 [1,2,3] 时,这会产生结果 y = [2,3]。我将如何使 y 列表独立于 x 列表?

【问题讨论】:

    标签: python list


    【解决方案1】:

    对此的一个常见习惯用法是y = x[:]。这会生成x 的浅表副本并将其存储在y 中。

    请注意,如果x 包含对对象的引用,y 也将包含对相同对象的引用。这可能是也可能不是您想要的。如果不是,请查看copy.deepcopy()

    【讨论】:

    • 别忘了提到l[:]是一个常见的成语。
    【解决方案2】:

    这是一种方法:

    import copy
    
    x = [1,2,3]
    y = copy.deepcopy(x)
    x.pop(0)
    print x
    print y
    

    来自docs here

    【讨论】:

    • +1 表示复制,因为它适用于其他对象,而不仅仅是列表。不过,copy.copy 会在这种情况下完成这项工作。
    【解决方案3】:

    虽然 aix 在这里给出了最简洁的答案,但为了完整起见,您也可以这样做:

    y = list(x)
    

    这将强制创建一个新列表,并清楚地表明您要做什么。我自己可能会这样做。但请注意 - 它不会进行深层复制(因此所有元素都是相同的引用)。

    如果您想确保 y 没有发生任何事情,您可以将其设为元组 - 这将防止删除和添加元素。如果你想这样做:

    y = tuple(x)
    

    作为最后的选择,您可以这样做:

    y = [a for a in x]
    

    这是复制的列表理解方法(非常适合进行基本的转换或过滤)。所以说真的,你有很多选择。

    【讨论】:

      猜你喜欢
      • 2021-05-13
      • 2020-01-05
      • 2011-02-27
      • 2023-03-30
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      相关资源
      最近更新 更多