{"id":479,"library":"deepdiff","title":"DeepDiff","description":"DeepDiff is a powerful Python library for finding the deep difference between nearly any two Python objects, including dictionaries, lists, sets, and custom objects. It provides detailed, human-readable, and machine-readable output in various formats like JSON and YAML. The current stable PyPI version is 6.2.0, with active development and frequent releases, including major version 9.0.0 available on GitHub.","status":"active","version":"6.2.0","language":"en","source_language":"en","source_url":"https://github.com/seperman/deepdiff","tags":["data comparison","diff","object comparison","json","yaml","dictionaries","lists","sets"],"install":[{"cmd":"pip install deepdiff","lang":"bash","label":"Install DeepDiff"}],"dependencies":[{"reason":"Required for maintaining order in sets during comparison.","package":"ordered-set","optional":false},{"reason":"Required for maintaining order in sets during comparison.","package":"orderly-set","optional":false}],"imports":[{"symbol":"DeepDiff","correct":"from deepdiff import DeepDiff"},{"symbol":"Delta","correct":"from deepdiff import Delta"}],"quickstart":{"code":"from deepdiff import DeepDiff\n\ndict1 = {'a': 1, 'b': 2, 'c': {'d': 4, 'e': 5}}\ndict2 = {'a': 1, 'b': 3, 'c': {'d': 4, 'f': 6}}\n\ndiff = DeepDiff(dict1, dict2)\nprint(diff)","lang":"python","description":"Demonstrates a basic deep difference between two dictionaries. The output will show added, removed, and changed items."},"warnings":[{"fix":"Review calls to `to_dict()` and `to_json()`, remove `view_override` and pass `verbose_level` explicitly if needed. Ensure Python environment is 3.10+.","message":"Version 9.0.0 introduces breaking changes to `to_dict()` and `to_json()` methods. The `view_override` parameter is removed, replaced by `verbose_level`. Additionally, Python 3.9 support has been dropped.","severity":"breaking","affected_versions":">=9.0.0"},{"fix":"If older behavior is desired, explicitly set `threshold_to_diff_deeper=0` when initializing `DeepDiff`.","message":"Version 8.0.0 changed the default behavior of `threshold_to_diff_deeper`, which might alter diff results for complex nested objects. Previously, a value of 0 was default. Now, it defaults to a non-zero value, leading to different comparison depth.","severity":"breaking","affected_versions":">=8.0.0"},{"fix":"Immediately upgrade to DeepDiff 8.6.1 or later to patch the vulnerability.","message":"Versions of DeepDiff prior to 8.6.1 were vulnerable to a security issue (CVE-2025-58367) in the `Delta` class, which could lead to Denial of Service and Remote Code Execution via insecure Pickle deserialization.","severity":"gotcha","affected_versions":"<8.6.1"},{"fix":"Ensure all items within collections compared with `ignore_order=True` are hashable. Use `DeepDiff(..., ignore_order=True, iterable_compare_func=lambda x: str(x))` or provide a custom comparison function for complex unhashable objects.","message":"When comparing collections with `ignore_order=True` (e.g., sets of dictionaries or lists), items must be hashable. If items are unhashable (e.g., lists), DeepDiff may raise a `TypeError`.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-12T14:10:54.939Z","next_check":"2026-07-15T00:00:00.000Z","problems":[{"fix":"Convert unhashable types to hashable equivalents (e.g., tuples from lists) before comparison, or provide a custom `iterable_compare_func` or `set_item_diff_func` that can handle the unhashable items.","cause":"Attempting to compare sets or dictionaries with `ignore_order=True` where keys or set members are unhashable types like lists.","error":"TypeError: unhashable type: 'list'"},{"fix":"Increase Python's recursion limit for the current scope using `sys.setrecursionlimit(new_limit)` (use with caution), or restructure your data to reduce nesting where possible.","cause":"Comparing deeply nested Python objects, exceeding Python's default recursion limit (often 1000).","error":"RecursionError: maximum recursion depth exceeded in comparison of two objects"},{"fix":"Ensure that the objects being compared are standard Python types or well-defined custom objects. If using `exclude_types` or `include_types`, verify that the specified types are correct and accessible.","cause":"This can occur when attempting to diff specific Python objects that DeepDiff doesn't inherently understand or when the `exclude_types` or `include_types` parameters are misused.","error":"KeyError: 'type'"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":80,"quickstart_tag":"verified","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"cli","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.14,"mem_mb":5.8,"disk_size":"21.8M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"optimize","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.26,"mem_mb":6,"disk_size":"19.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.15,"mem_mb":5.8,"disk_size":"18.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"cli","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.09,"mem_mb":5.8,"disk_size":"23M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"optimize","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.09,"mem_mb":6,"disk_size":"20M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.1,"mem_mb":5.8,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"cli","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.24,"mem_mb":6.4,"disk_size":"24.2M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"optimize","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.24,"mem_mb":6.6,"disk_size":"21.3M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.23,"mem_mb":6.4,"disk_size":"20.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"cli","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.17,"mem_mb":6.4,"disk_size":"25M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"optimize","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.18,"mem_mb":6.6,"disk_size":"22M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.18,"mem_mb":6.4,"disk_size":"21M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"cli","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.2,"mem_mb":6.5,"disk_size":"16.0M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"optimize","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.19,"mem_mb":6.6,"disk_size":"13.1M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.2,"mem_mb":6.5,"disk_size":"12.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"cli","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.18,"mem_mb":6.5,"disk_size":"17M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"optimize","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.2,"mem_mb":6.6,"disk_size":"14M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.18,"mem_mb":6.5,"disk_size":"13M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"cli","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.35,"mem_mb":7.4,"disk_size":"15.7M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"optimize","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.19,"mem_mb":7.5,"disk_size":"12.7M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.19,"mem_mb":7.4,"disk_size":"12.4M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"cli","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.18,"mem_mb":7.4,"disk_size":"17M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"optimize","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.18,"mem_mb":7.5,"disk_size":"13M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.17,"mem_mb":7.4,"disk_size":"13M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"cli","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.14,"mem_mb":5.2,"disk_size":"20.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"optimize","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.14,"mem_mb":5.3,"disk_size":"18.4M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.14,"mem_mb":5.2,"disk_size":"18.1M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"cli","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.11,"mem_mb":5.2,"disk_size":"22M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"optimize","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.11,"mem_mb":5.3,"disk_size":"19M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.11,"mem_mb":5.2,"disk_size":"19M"}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}