task: metadata: install: pip install -e .[examples]
patch: diff --git a/apischema/deserialization/__init__.py b/apischema/deserialization/__init__.py
index eed26ac..240efaf 100644
--- a/apischema/deserialization/__init__.py
+++ b/apischema/deserialization/__init__.py
@@ -58,6 +58,7 @@ from apischema.deserialization.methods import (
     FieldsConstructor,
     FlattenedField,
     FloatMethod,
+    FrozenSetMethod,
     IntMethod,
     ListCheckOnlyMethod,
     ListMethod,
@@ -360,13 +361,19 @@ class DeserializationMethodVisitor(
             value_method = value_factory.method
             list_constraints = constraints_validators(constraints)[list]
             method: DeserializationMethod
-            if issubclass(cls, collections.abc.Set):
+            if issubclass(cls, collections.abc.Set) and not issubclass(cls, frozenset):
                 return SetMethod(list_constraints, value_method)
-            elif self.no_copy and check_only(value_method):
+
+            if self.no_copy and check_only(value_method):
                 method = ListCheckOnlyMethod(list_constraints, value_method)
             else:
                 method = ListMethod(list_constraints, value_method)
-            return VariadicTupleMethod(method) if issubclass(cls, tuple) else method
+
+            if issubclass(cls, tuple):
+                return VariadicTupleMethod(method)
+            if issubclass(cls, frozenset):
+                return FrozenSetMethod(method)
+            return method
 
         return self._factory(factory, list)
 
diff --git a/apischema/deserialization/methods.py b/apischema/deserialization/methods.py
index 5cc1e97..a1d4372 100644
--- a/apischema/deserialization/methods.py
+++ b/apischema/deserialization/methods.py
@@ -308,6 +308,14 @@ class SetMethod(DeserializationMethod):
         return values
 
 
+@dataclass
+class FrozenSetMethod(DeserializationMethod):
+    method: DeserializationMethod
+
+    def deserialize(self, data: Any) -> Any:
+        return frozenset(self.method.deserialize(data))
+
+
 @dataclass
 class VariadicTupleMethod(DeserializationMethod):
     method: DeserializationMethod

problem_statement: Fix frozenset deserialization
AbstractSet and FrozenSet are not deserialized in frozensets.
```python
from typing import AbstractSet, FrozenSet
from apischema import deserialize
assert type(deserialize(AbstractSet[int], [1, 2, 3])) is set
assert type(deserialize(FrozenSet[int], [1, 2, 3])) is set
```
PR to follow
repo: wyfo/apischema
test_cmd: pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
test_patch: diff --git a/tests/unit/test_deserialization_serialization.py b/tests/unit/test_deserialization_serialization.py
index 7d6d0de..a076691 100644
--- a/tests/unit/test_deserialization_serialization.py
+++ b/tests/unit/test_deserialization_serialization.py
@@ -4,6 +4,7 @@ from enum import Enum
 from typing import (
     AbstractSet,
     Any,
+    FrozenSet,
     List,
     Mapping,
     Optional,
@@ -30,6 +31,7 @@ uuid = str(uuid4())
 def bijection(cls, data, expected):
     obj = deserialize(cls, data)
     assert obj == expected
+    assert type(obj) is type(expected)
     assert serialize(cls, obj) == data
 
 
@@ -97,7 +99,8 @@ def test_primitive_error(data):
         (List, [0, SimpleDataclass(0)]),
         (Set, {0, SimpleDataclass(0)}),
         (Sequence, [0, SimpleDataclass(0)]),
-        (AbstractSet, frozenset([0, SimpleDataclass(0)])),
+        (AbstractSet, {0, SimpleDataclass(0)}),
+        (FrozenSet, frozenset([0, SimpleDataclass(0)])),
     ],
 )
 def test_collection(cls, expected):
@@ -188,7 +191,7 @@ def test_with_class_context():
     class BigInt(int):
         pass
 
-    bijection(BigInt, 100, 100)
+    bijection(BigInt, 100, BigInt(100))
 
 
 def test_properties():