| single |
# DeepDiff v 9.1.0
![Downloads]
![Python Versions]
![License]
[Build Status]
[codecov]
**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.*
## Modules
- [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.
- **[Documentation]**
## What is new?
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
## Installation
### Install from PyPi:
`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]
# Documentation
# ChangeLog
Please take a look at the [CHANGELOG] file.
# Survey
:mega: **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! :dancers:
# Local dev
|