在Python 2中,如何通过值而不是引用来复制复杂嵌套元素的列表,而不管列表的内容如何

时间:2017-08-02 13:32:24

标签: python list reference

我遇到了一些关于通过引用和值(thisthisthis)复制列表的重要问题和答案。遗憾的是,所提出的解决方案均未从所有嵌套结构中删除引用(已尝试b = a[:]b = list(a)copy.copy ...)。我的最后一个希望是copy.deepcopy,但是当内部有一个数组时,它对嵌套结构不起作用(我正在使用openpyxl列)。我在堆栈的底部出现了这个错误:

  File "C:\Python27\lib\copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
TypeError: unhashable type: 'array.array'

我的问题是:是否可以在没有任何引用的情况下创建列表a的完整副本,无论a内嵌套的内容是什么?

1 个答案:

答案 0 :(得分:1)

确实,deepcopy就是你所需要的。问题是StyleArray课程没有实现__deepcopy__

以下修复似乎可以完成这项工作:

def __deepcopy__(self, memo):
    return self.__copy__()

注意:__copy__已经是按值复制(待检查)。

它还回答了您更通用的问题:为了制作嵌套结构的完整副本,非标准嵌套元素必须以某种方式指示如何复制自己。