我遇到了一些关于通过引用和值(this,this和this)复制列表的重要问题和答案。遗憾的是,所提出的解决方案均未从所有嵌套结构中删除引用(已尝试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
内嵌套的内容是什么?
答案 0 :(得分:1)
确实,deepcopy
就是你所需要的。问题是StyleArray
课程没有实现__deepcopy__
。
以下修复似乎可以完成这项工作:
def __deepcopy__(self, memo):
return self.__copy__()
注意:__copy__
已经是按值复制(待检查)。
它还回答了您更通用的问题:为了制作嵌套结构的完整副本,非标准嵌套元素必须以某种方式指示如何复制自己。