gpt4 book ai didi

python - 如何在Python中深度复制搁置对象

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:40 25 4
gpt4 key购买 nike

是否可以在Python中深度复制搁置对象?当我尝试深度复制它时,出现以下错误:

import shelve,copy
input = shelve.open("test.dict", writeback=True)
input.update({"key1": 1, "key2": 2})
newinput = copy.deepcopy(input)
>> object.__new__(DB) is not safe, use DB.__new__()

这是否意味着书架不可复制?

编辑:如果我详细说明我的问题可能会更好:我将一个大字典作为搁置对象,并且我想将整个搁置对象(=到目前为止我生成的所有键、值对)保存到一个单独的文件,同时我不断向原始字典添加新项目。

也许我可以首先同步搁置并显式地将搁置文件复制到磁盘上,但我不喜欢这种方法。

最佳答案

不,我不认为它们是可复制的(除非你猴子修补类或转换成字典)。原因如下:

copy.copy()copy.deepcopy()调用__copy__()__deepcopy__()不依赖于“标准”类型的实例的方法(即 atomiclisttupleinstance methods )。如果该类没有这些属性,则会回退到 __reduce_ex____reduce__ 。 (请参阅来源中的 copy.py)

不幸的是,搁置对象Shelf基于UserDict.DictMixin它没有定义 copy() (Shelf 也没有):

class DictMixin:

# Mixin defining all dictionary methods for classes that already have
# a minimum dictionary interface including getitem, setitem, delitem,
# and keys. Without knowledge of the subclass constructor, the mixin
# does not define __init__() or copy(). In addition to the four base
# methods, progressively more efficiency comes with defining
# __contains__(), __iter__(), and iteritems().

将问题提交到搁置模块错误跟踪器可能是个好主意。

关于python - 如何在Python中深度复制搁置对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19584912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com