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



我遇到了一些关于按引用复制列表与按值(这个、这个和这个(复制列表的好问题和答案。不幸的是,没有一个建议的解决方案从所有嵌套结构中删除引用(尝试b = a[:]b = list(a)copy.copy...(。我最后的希望是copy.deepcopy但是当内部某处有一个数组时,它不适用于嵌套结构(我正在处理 openpyxl 列(。我在堆栈底部收到此错误:

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

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

事实上,deepcopy就是你需要的。问题是StyleArray类没有实现__deepcopy__

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

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

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

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

最新更新