gpt4 book ai didi

python - 将可变变量(例如列表)作为 Python 字典中的值进行引用 - 什么是最佳实践?

转载 作者:太空狗 更新时间:2023-10-29 20:29:16 25 4
gpt4 key购买 nike

可以将字典键映射到一个值,该值是对可变对象,例如列表。这样的列表对象可以通过调用来改变引用的列表方法,更改将反射(reflect)在字典。这在以下内容中讨论:

我的问题

将字典键映射到可变对象的引用是一个好主意吗对象而不是将键映射到未命名的值?

换句话说,它最好创建一个字典:

In [74]: x = {'a': somelist}

或:

In [74]: x = {'a': somelist[:]}

通过引用该值来更改字典值是否更好通过引用,例如:

In [77]: somelist.remove('apples')

或者通过它的字典索引:

In [77]: x['a'].remove('apples')

讨论与研究

引用提供了一个很好的句柄,可以提高可读性,比如说,功能。然而,据我所知,字典值是一旦创建了值,最初绑定(bind)到引用的内容就会丢失;一个不能在显示字典时看到这个事实。

另一方面,我不确定这是否重要,因为引用和值是同一个对象,如果删除引用,值对象本身仍然存在。

如我所见:

In [73]: somelist = ['apples', 'oranges', 'lemons', 'tangerines']
In [74]: x = {'a': somelist}
In [75]: x
Out[75]: {'a': ['apples', 'oranges', 'lemons', 'tangerines']}

在字典 x 中,键 'a' 映射到值 somelist,虽然我没有查看一种方法来验证该值是否与引用相关联somelist.

In [76]: x['a'] is somelist
Out[76]: True

这证实了我看到的作为值的列表与对象相同由 somelist 指向。

In [77]: x['a'].remove('apples')
In [78]: x
Out[78]: {'a': ['oranges', 'lemons', 'tangerines']}

由于字典 x'a' 的值是一个列表,我可以删除一个项目使用对象 x['a'] 上的列表方法 remove 从列表中删除。

In [79]: somelist.remove('lemons')
In [80]: x
Out[80]: {'a': ['oranges', 'tangerines']}

或者,我可以在对象 somelist 上使用方法 remove

In [81]: del somelist

我可以删除对列表的引用,但列表对象本身仍然存在作为与键 a 关联的值。

In [82]: x['a'].remove('oranges')

In [83]: x
Out[83]: {'a': ['tangerines']}

最佳答案

据我了解你的问题,答案是这取决于你想做什么。如果要将字典值设置为某个其他值的独立副本,则制作一个副本。如果要将其设置为同一个对象,则不要复制。

在某些情况下,您可能希望字典引用与其他引用相同的对象,因为这允许字典“看到”对该对象的更改。在某些情况下,您可能希望字典有自己的副本,因为您不希望更改对象的其他代码影响您的字典。这仅取决于可变对象是什么以及您的代码作为一个整体如何使用它。

关于python - 将可变变量(例如列表)作为 Python 字典中的值进行引用 - 什么是最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30882329/

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