Skip to content

Commit 1f1f1ec

Browse files
add set/delete/update functions (#271)
1 parent bdf02ce commit 1f1f1ec

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

immutabledict/__init__.py

+15
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,21 @@ def keys(self) -> KeysView[_K]:
9898
def values(self) -> ValuesView[_V]:
9999
return self._dict.values()
100100

101+
def set(self, key: _K, value: Any) -> immutabledict[_K, _V]:
102+
new = dict(self._dict)
103+
new[key] = value
104+
return self.__class__(new)
105+
106+
def delete(self, key: _K) -> immutabledict[_K, _V]:
107+
new = dict(self._dict)
108+
del new[key]
109+
return self.__class__(new)
110+
111+
def update(self, _dict: Dict[_K, _V]) -> immutabledict[_K, _V]:
112+
new = dict(self._dict)
113+
new.update(_dict)
114+
return self.__class__(new)
115+
101116

102117
class ImmutableOrderedDict(immutabledict[_K, _V]):
103118
"""

tests/test_immutabledict.py

+18
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,24 @@ def test_performance(self, statement: str) -> None:
215215

216216
assert time_immutable < 1.2 * time_standard
217217

218+
def test_set_delete_update(self) -> None:
219+
d: immutabledict[str, int] = immutabledict(a=1, b=2)
220+
221+
assert d.set("a", 10) == immutabledict(a=10, b=2) == dict(a=10, b=2)
222+
assert d.delete("a") == immutabledict(b=2) == dict(b=2)
223+
224+
with pytest.raises(KeyError):
225+
d.delete("c")
226+
227+
assert d.update({"a": 3}) == immutabledict(a=3, b=2) == dict(a=3, b=2)
228+
229+
assert (
230+
d.update({"c": 17}) == immutabledict(a=1, b=2, c=17) == dict(a=1, b=2, c=17)
231+
)
232+
233+
# Make sure d doesn't change
234+
assert d == immutabledict(a=1, b=2) == dict(a=1, b=2)
235+
218236
def test_new_kwargs(self) -> None:
219237
immutable_dict: immutabledict[str, int] = immutabledict(a=1, b=2)
220238
assert immutable_dict == {"a": 1, "b": 2} == dict(a=1, b=2)

0 commit comments

Comments
 (0)