gpt4 book ai didi

python - 返回输入字典保留引用

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:22 27 4
gpt4 key购买 nike

我有一个程序,其中必须在模拟中每年复制一些属性的字典,并且必须更新一些键。但是,当我将字典发送到函数,在函数内更改它然后返回它时,返回的字典保留作为对原始字典的引用。让我用下面的代码展示一个简单的例子。

def change(dict_in):
dict_in['value'] = 50
return dict_in

props = [{'value':12}]
props.append(change(props[-1]))
props
[{'value': 50}, {'value': 50}]

但是,正如上面所看到的,第一个字典中的属性“value”也发生了更改。

当我使用 copy.deepcopy 函数时,它按预期工作:

import copy
props = [{'value':12}]
props.append( change( copy.deepcopy(props[-1]) ) )
props
[{'value': 12}, {'value': 50}]

但这是让它发挥作用的唯一方法吗!?

最佳答案

如果您在 deepcopyupdate 中看到的问题是在每次模拟迭代后都会创建字典的副本,您可以考虑使用不可变字典类型。不幸的是,Python 标准库不提供不可变字典。但是,该数据结构可在 pyrsistent 等库中使用。 。来自pmap的pyristent文档:

>>> from pyrsistent import m, pmap, v

# No mutation of maps once created, instead they are
# "evolved" leaving the original untouched
>>> m1 = m(a=1, b=2)
>>> m2 = m1.set('c', 3)
>>> m3 = m2.set('a', 5)
>>> m1
pmap({'a': 1, 'b': 2})
>>> m2
pmap({'a': 1, 'c': 3, 'b': 2})
>>> m3
pmap({'a': 5, 'c': 3, 'b': 2})
>>> m3['a']
5

关于python - 返回输入字典保留引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46659672/

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