wks*_*rtz 9 python dictionary immutability python-3.x
简短版本:什么是覆盖dict.keys()和朋友的最佳方式,以防止我在Python 3中意外修改我的(据称)不可变字典?
在最近的一个问题中,我询问了如何在Python中散列不可变字典.从那时起,我已经建立了一个我不满意的不可改变,可以翻译的字典.但是,我意识到它有一个孔:在字典视图由归国keys(),items()和values()仍然让自己偶然突变我(据说)不变的字典.
关于字典视图的Stack Overflow唯一的问题是Python创建自己的字典子集dict视图,但这似乎与我的问题没什么关系,以及"冻结字典"的答案是什么?似乎没有进入压倒keys()等等
这样做会阻止我意外修改,例如,我的不可变字典的键吗?
class FrozenCounter(collections.Counter):
"Model an hashable multiset as an immutable dictionary."
# ...
def keys(self):
return list(super().keys())
def values(self):
return list(super().values())
def items(self):
return list(super().items())
Run Code Online (Sandbox Code Playgroud)
我主要看不懂.
dictviews无法修改dicts.在Python 3文档中,我误读了"它们提供了对字典条目的动态视图,这意味着当字典发生更改时,视图会反映这些更改","当视图发生更改时,字典会反映这些更改." 显然,这不是文件所说的.
在Python 2.x中,视图不允许您更改基础对象:
>>> a = { 'a' : 1 }
>>> a.keys()[0] = 'b'
>>> a
{'a': 1}
>>> a.values()[0] = 'b'
>>> a
{'a': 1}
Run Code Online (Sandbox Code Playgroud)
在Python 3.x中,更改视图会产生TypeError:
>>> a = { 'a':1}
>>> a.keys()[0] = 'b'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'dict_keys' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7523 次 |
| 最近记录: |