【发布时间】:2018-01-09 18:26:38
【问题描述】:
我遇到了一些关于按引用与按值复制列表的好问题和答案(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 中嵌套了什么?
【问题讨论】:
-
您的错误不是由于
deepcopy。而是您尝试将其用作key到dict的事实,这要求key是可散列的类型。 -
您在整个结构上调用一次
copy.deepcopy,所有内容都会被递归复制:b = copy.deepcopy(a) -
然而,
copy.pypython 模块是错误的根源。 -
我想我没听懂你们的意思。 @CoryKramer,这个结构中可能有一些 dict 但为什么重要? @COLDSPEED 这就是我所做的。在我的情况下:
tmp_columns = deepcopy([r for r in ws.columns])它会抛出TypeError。 -
@Artur 随便
tmp_columns = deepcopy(ws.columns)。