gpt4 book ai didi

python - 有 "medium"副本这样的东西吗?或者 : how to finely control "depth" of copy?

转载 作者:太空狗 更新时间:2023-10-30 02:56:07 26 4
gpt4 key购买 nike

我有一本字典。字典键是整数,值是对象列表

我希望能够以这样一种方式复制字典,使我可以返回到完全相同的对象,但不同的列表

当我使用普通副本时——dict.copy() 或 copy.copy(dict)——我对复制字典中的列表所做的任何更改也会更改原始字典的列表。

但是,当我使用 copy.deepcopy(dict) 时,它会一直运行并生成新对象,因此我不能,例如,在删除特定内容时将原始字典的列表用作“待办事项”复制字典列表中的对象,或对需要与原始对象进行比较的复制字典列表进行任何其他类型的更改。

关于“复制”模块 ( https://docs.python.org/2/library/copy.html ) 的文档似乎没有提到任何类型的中间选项,或者某种调整深度的方法。

是否存在这样的选项或功能或诸如此类的东西?如果不是,我只是从错误的角度思考问题吗?例如,我想如果我遍历字典并以这种方式手动“复制”内容,我可能能够实现所需的行为(但这似乎很啰嗦!?)。

最佳答案

您可以只实现您自己的“中等”版本-复制:

import copy


def mediumcopy(value):
return dict(
(key, copy.copy(val))
for key, val in value.iteritems())

z = {'a': [[1], [2]]}
zcopy = mediumcopy(z)
assert id(z) != id(zcopy) # True
assert id(z['a']) != id(zcopy['a']) # True
assert id(z['a'][0]) == id(zcopy['a'][0]) # True

Python 3 版本:

def mediumcopy(value):
return {key: list(val) # you can still use copy.copy here
for key, val in value.items()}

z = {'a': [[1], [2]]}
zcopy = mediumcopy(z)
assert id(z) != id(zcopy) # True
assert id(z['a']) != id(zcopy['a']) # True
assert id(z['a'][0]) == id(zcopy['a'][0]) # True

关于python - 有 "medium"副本这样的东西吗?或者 : how to finely control "depth" of copy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40472547/

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