OrderedDict 的(不)可变性
Posted
技术标签:
【中文标题】OrderedDict 的(不)可变性【英文标题】:(Im)mutability of OrderedDict 【发布时间】:2021-12-28 07:54:36 【问题描述】:Python 的OrderedDict
数据结构是可变集合吗?
documentation对此没有说什么,在网上快速搜索后,我还没有找到任何答案。
【问题讨论】:
【参考方案1】:文档没有说任何关于它的内容,并且在快速之后 在网上搜索,我还没有找到任何答案。
当您对类的可变性有疑问时,您可以运行以下测试
from collections import OrderedDict
from collections.abc import MutableSequence, MutableSet, MutableMapping
print(issubclass(OrderedDict,(MutableSequence,MutableSet,MutableMapping)))
输出
True
请参阅 collections.abc
文档中的 Collections Abstract Base Classes 了解可以通过这种方式检查的其他内容。
【讨论】:
【参考方案2】:OrderedDict 是可变的:
from collections import OrderedDict
d = OrderedDict.fromkeys('abcde')
d['a']= 'aretor'
print(d)
>> OrderedDict([('a', 'aretor'), ('b', None), ('c', None), ('d', None), ('e', None)])
print(d['a'])
>> aretor
【讨论】:
【参考方案3】:来自realpython.com:
由于 OrderedDict 是一个可变数据结构,你可以执行 对其实例进行变异操作。您可以插入新项目,更新 并删除现有项目,等等。如果您将新项目插入 现有的有序字典,然后将该项目添加到 字典:
他们提供了几个可变操作的例子,比如插入:
>>> from collections import OrderedDict
>>> numbers = OrderedDict(one=1, two=2, three=3)
>>> numbers
OrderedDict([('one', 1), ('two', 2), ('three', 3)])
>>> numbers["four"] = 4
>>> numbers
OrderedDict([('one', 1), ('two', 2), ('three', 3), ('four', 4)])
一般来说,如果一个数据类型支持以下operations,那么它就被认为是一个可变序列类型。
【讨论】:
以上是关于OrderedDict 的(不)可变性的主要内容,如果未能解决你的问题,请参考以下文章