我正在尝试types.MappingProxyType:
class MyClass:
l = [1, 2]
proxy = MyClass.__dict__
然后我想从这个代理中提取字典:
d = proxy.copy()
print(type(d))
#<class 'dict'>
然后我想附加一些东西来列出值d:
d["l"].append(3)
但这也会影响proxy(当然):
>>> print(proxy["l"])
[1, 2, 3]
我不想影响我们的proxy,所以我尝试使用copy.deepcopy:
import copy
dict_2 = copy.deepcopy(d)
它给出了一个错误:
Traceback (most recent call last):
File "C:\Users\Dinçel\AppData\Local\Programs\Python\Python37\istihza.py", line 18, in <module>
dict_2 = copy.deepcopy(d)
File "C:\Users\Dinçel\AppData\Local\Programs\Python\Python37\lib\copy.py", line 150, in deepcopy
y = copier(x, memo)
File "C:\Users\Dinçel\AppData\Local\Programs\Python\Python37\lib\copy.py", line 240, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "C:\Users\Dinçel\AppData\Local\Programs\Python\Python37\lib\copy.py", line 169, in deepcopy
rv = reductor(4)
TypeError: can't pickle getset_descriptor objects
我知道复制模块正在尝试使用泡菜模块用于复制的功能。 https://docs.python.org/3/library/copy.html#copy.deepcopy
类可以使用相同的接口来控制它们用来控制酸洗的复制。有关这些方法的信息,请参阅模块 pickle 的描述。实际上,copy 模块使用了 copyreg 模块中注册的 pickle 函数。
问题是,类型d是dict. 我们可以对字典进行深度复制:
copy.deepcopy({"this":["is", "a", "dict"]})
那么如果 type of dis dict,为什么我不能对其进行深度复制?或者是d不是真正的 dict 类型,它只是 Python 中的一个 hack?
沧海一幻觉
相关分类