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_pathsandinclude_pathsthanks to @akshat62 - Reimplemented internal cache for improved performance
- Memoized
GlobPathMatcherto remove exponential-time matching cliff - Comprehensive type-hint corrections across
deephash.py,helper.py,delta.py,diff.py,distance.py,path.py, andserialization.py(also fixed real bugs: misplaced paren inpath._guess_typecall, andlen(other.indexes > 1)→len(other.indexes) > 1indiff._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 theset_item_addedpath 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.inthanks 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:
- yaml
- tomli (python 3.10 and older) and tomli-w for writing
- clevercsv for more robust CSV parsing
- orjson for speed and memory optimized parsing
- pydantic
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
uvto install the dependencies:uv sync --all-extras. - Method 2: Use pip:
pip install -e ".[cli,coverage,dev,docs,static,test]"
- Method 1: Use
-
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.