【问题标题】:How can I copy a Python object with its values not its references addresses of variables?如何复制 Python 对象的值而不是变量的引用地址?
【发布时间】:2020-12-29 06:38:17
【问题描述】:

所以,我有一个这样的 Python 列表:

list_ = [[Object, 2, ["r","g","b"]],
         [Object, 5, ["r","g","b"]],
         ...
         [Object, 3, ["r","g","b"]]]

我需要将此列表复制到一个新列表,但是当我使用 copy.deepcopy() 时,它会使用列表及其引用。

new_list = copy.deepcopy(list_)

当我更改 new_list 中的值时,它会影响列表中的值_ 我想复制 new_list 将具有独立变量的 list_,因此它必须复制值,而不是引用变量的地址。我该怎么做?

【问题讨论】:

  • 你能加个例子吗
  • 您是如何创建原始列表的?

标签: python arrays object copy


【解决方案1】:

只需使用列表推导:

new_list = [x[:] for x in list_]

但老实说,copy.deepcopy 可以正常工作,无论列表中的维度如何,您一定是在其他地方犯了错误。无论如何,与列表切片相比,slow 可能令人难以置信。

【讨论】:

    【解决方案2】:

    我不知道你的代码发生了什么,但是当我执行时

    new_list = copy.deepcopy(list_)

    代码运行良好。我更改了new_list 中的值,list_ 没有受到影响。 您的代码的问题可能出在其他地方。请检查您的代码并检查。

    您可以用来将项目从一个列表复制到另一个列表的另一种方法是列表理解

    list_ = [[Object, 2, ["r","g","b"]],
             [Object, 5, ["r","g","b"]],
             ...
             [Object, 3, ["r","g","b"]]]
    
    
    new_list = list_[:]
    

    希望这对你有用。

    【讨论】:

    • 这是不正确的。 new_list = list_[:] 仍然会改变嵌套列表中的任何一个元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2015-08-30
    • 2011-02-07
    相关资源
    最近更新 更多