
DeepDiff is now part of Qluster.
If you're building workflows around data validation and correction, Qluster gives your team a structured way to manage rules, review failures, approve fixes, and reuse decisions—without building the entire system from scratch.
- DeepDiff: Deep Difference of dictionaries, iterables, strings, and ANY other object.
- DeepSearch: Search for objects within other objects.
- DeepHash: Hash any object based on their content.
- Delta: Store the difference of objects and apply them to other objects.
- Extract: Extract an item from a nested Python object using its path.
- commandline: Use DeepDiff from commandline.
Tested on Python 3.10+ and PyPy3.
Please check the ChangeLog file for the detailed information.
DeepDiff 9-1-0
- Added multiprocessing support for DeepDiff: parallel distance computation and parallel subtree diffing with aggregated worker stats, deterministic ordering, and automatic fallback to serial when unsafe (e.g. custom_operators, *_obj_callback, ignore_order_func)
- Added wildcard/glob pattern support for exclude_paths and include_paths thanks to @akshat62
- Reimplemented internal cache for improved performance
- Memoized GlobPathMatcher to remove exponential-time matching cliff
- Comprehensive type-hint corrections across deephash.py, helper.py, delta.py, diff.py, distance.py, path.py, and serialization.py (also fixed real bugs: misplaced paren in path._guess_type call, and len(other.indexes > 1) → len(other.indexes) > 1 in diff._compare_in_order)
- Security: Delta dunder-attribute traversal in check_elem() now raises immediately instead of going through _raise_or_log(), with full-path preflight validation in _get_elements_and_details() so the set_item_added path cannot silently skip malicious dunder paths
- Fixed nested NamedTuple set/frozenset Delta updates dropping the outer container
- Fixed tuple Deltas using iterable opcodes silently doing nothing for insert/delete-only changes
- Fixed Delta with both moved and added iterable items mutating the Delta's own internal diff data
- Fixed crash during path sorting when removing multiple dictionary items with complex keys
- Packaging: added missing files to sdist and removed obsolete MANIFEST.in thanks to @mgorny
- Updated GitHub Actions workflows and dependencies
pip install deepdiff
If you want to use DeepDiff from commandline:
pip install "deepdiff[cli]"
If you want to improve the performance of DeepDiff with certain functionalities such as improved json serialization:
pip install "deepdiff[optimize]"
Install optional packages:
https://zepworks.com/deepdiff/current/
Please take a look at the CHANGELOG file.
📣 Please fill out our fast 10-question survey so that we can learn how & why you use DeepDiff, and what improvements we should make. Thank you! 👯
-
Clone the repo
-
Switch to the dev branch
-
Create your own branch
-
Install dependencies
- Method 1: Use uv to install the dependencies: uv sync --all-extras.
- Method 2: Use pip: pip install -e ".[cli,coverage,dev,docs,static,test]"
-
Build uv build
- Please make your PR against the dev branch
- Please make sure that your PR has tests. Since DeepDiff is used in many sensitive data driven projects, we strive to maintain around 100% test coverage on the code.
Please run pytest --cov=deepdiff --runslow to see the coverage report. Note that the --runslow flag will run some slow tests too. In most cases you only want to run the fast tests which so you won't add the --runslow flag.
Or to see a more user friendly version, please run: pytest --cov=deepdiff --cov-report term-missing --runslow.
Thank you!
Please take a look at the AUTHORS file.