diff --git a/python_jsonschema_objects/classbuilder.py b/python_jsonschema_objects/classbuilder.py
index 809095e..5524b18 100644
--- a/python_jsonschema_objects/classbuilder.py
+++ b/python_jsonschema_objects/classbuilder.py
@@ -127,6 +127,9 @@ class ProtocolBase(collections.MutableMapping):
         obj.validate()
         return obj
 
+    def __deepcopy__(self, memo):
+        return self.__class__(**self.as_dict())
+
     def __new__(cls, **props):
         """ Overridden to support oneOf, where we need to
         instantiate a different class depending on what
diff --git a/tox.ini b/tox.ini
index dccf043..d1fc67c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,6 +1,7 @@
 
 [tox]
-envlist = py{27,35,36,37}-jsonschema{23,24,25,26,30}-markdown{2,3}
+envlist = py{35,36,37}-jsonschema{23,24,25,26,30}-markdown{2,3}
+skip_missing_interpreters = true
 
 [testenv]
 ;install_command = pip install {opts} {packages}

deep-copying of instances seems not to work
Here is a minimal viable example

```
import pytest
import fastjsonschema
import python_jsonschema_objects as pjs

from dataclasses import dataclass
import json
import copy
import pprint
pp = pprint.PrettyPrinter(indent=2)

lpid_class_schema = {
    '$id': 'https://example.com/schema-repository/lpid',
    '$schema': 'http://json-schema.org/draft-07/schema/#',
    'type': 'object',
    'title': 'Logical Process ID',
    'properties': {'lpid_str': {'type': 'string',}},
    'required': ['lpid_str'],
    'additionalProperties': True}


@dataclass()
class A:
    a_str: str


def test_pjs_deepcopy():
    # Class building and instantiation work great and round-trip.
    lpid_class_builder = pjs.ObjectBuilder(lpid_class_schema)
    LPID = lpid_class_builder.classes.LogicalProcessId
    lpid = LPID(lpid_str='foobaz')
    instance = json.loads(lpid.serialize())
    fastjsonschema.validate(lpid_class_schema, instance)

    # But deep-copying with objects of generated classes doesn't terminate.
    with pytest.raises(RecursionError) as e_info:
        lpid_2 = copy.deepcopy(lpid)
    pp.pprint(e_info)

    # Deep-copying seems to work with instances of normal popos.
    a = A(a_str='barqux')
    assert a
    a_2 = copy.deepcopy(a)
    assert a_2
    assert a == a_2
```

EDIT: A workaround might be to create a new, deeply copied instance object from the serialized JSON. Not sure whether you have code to do that. Would be a lot of boilerplate to write for a bunch of classes.
diff --git a/test/test_regression_185.py b/test/test_regression_185.py
new file mode 100644
index 0000000..67145f3
--- /dev/null
+++ b/test/test_regression_185.py
@@ -0,0 +1,45 @@
+import pytest
+import python_jsonschema_objects as pjs
+import jsonschema
+
+import json
+import copy
+import pprint
+
+pp = pprint.PrettyPrinter(indent=2)
+
+lpid_class_schema = {
+    "$id": "https://example.com/schema-repository/lpid",
+    "$schema": "http://json-schema.org/draft-04/schema#",
+    "type": "object",
+    "title": "Logical Process ID",
+    "properties": {"lpid_str": {"type": "string"}},
+    "required": ["lpid_str"],
+    "additionalProperties": True,
+}
+
+
+class A(object):
+    a_str = None
+
+    def __init__(self, a_str):
+        self.a_str = a_str
+
+
+def test_regression_185_deepcopy():
+    # Class building and instantiation work great and round-trip.
+    lpid_class_builder = pjs.ObjectBuilder(lpid_class_schema)
+    LPID = lpid_class_builder.classes.LogicalProcessId
+    lpid = LPID(lpid_str="foobaz")
+    instance = json.loads(lpid.serialize())
+    jsonschema.validate(lpid_class_schema, instance)
+
+    # Deep-copying seems to work with instances of normal popos.
+    a = A(a_str="barqux")
+    assert a
+    a_2 = copy.deepcopy(a)
+    assert a_2
+
+    # But deep-copying with objects of generated classes doesn't terminate.
+    lpid_2 = copy.deepcopy(lpid)
+    assert repr(lpid_2) == repr(lpid)

pip install -e .[dev]
parse_log_pytest
pytest
pytest
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
certifi==2021.5.30
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
inflection==0.5.1
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
jsonschema==3.2.0
Markdown==3.3.7
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pyrsistent==0.18.0
pytest==6.2.4
-e git+https://github.com/cwacek/python-jsonschema-objects.git@8d6b992919bf240f4142acb2bbbf8c1dca41bcb6#egg=python_jsonschema_objects
six==1.17.0
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: python-jsonschema-objects
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - inflection==0.5.1
      - jsonschema==3.2.0
      - markdown==3.3.7
      - pyrsistent==0.18.0
      - six==1.17.0
prefix: /opt/conda/envs/python-jsonschema-objects

test/test_regression_185.py::test_regression_185_deepcopy
tox.ini python_jsonschema_objects/classbuilder.py
tox.ini python_jsonschema_objects/classbuilder.py