# Python : DeepDiff
\[ [pypi](https://pypi.org/project/deepdiff/) | [src](https://github.com/seperman/deepdiff/) | [docs](https://zepworks.com/deepdiff/current/) ]
```python
from deepdiff import DeepDiff # deep diff of two things
from deepdiff import grep, DeepSearch # finding items in an object
from deepdiff import DeepHash # hashing objects based on contents
from deepdiff import Delta # creating re-useable deltas
from deepdiff import extract # extracting a path from an object
from deepdiff.operator import BaseOperator
```
#### DeepDiff
```python
DeepDiff( dict1, dict2 ) # if match, returns {}
diff.to_dict()
diff.to_json()
### Custom Operators
class AbortAfterFirstDiff( BaseOperator ):
def match( self, level ):
return True
def give_up_diffing( self, level, diff_instance ):
return any( diff_instance.tree.values() )
DeepDiff( t1, t2, custom_operators=[ AbortAfterFirstDiff() ] )
```
###### Diff Example
```
{ 'values_changed' : {
"root[ 'metadata' ][ 'annotations' ][ 'run.googleapis.com/operation-id' ]": {
'new_value' : '040374e2-bbbe-421d-b683-784ffc46443e'
'old_value' : '7f7481f2-e750-4f7d-adfc-23016fefefd4' }
"root[ 'metadata' ][ 'generation' ]": {
'new_value' : 29
'old_value' : 28 } } }
```
TODO
#### DeepSearch
TODO
#### DeepHash
```python
hash = DeepHash( obj )[ obj ]
```
TODO
#### Delta
TODO
#### Extract
TODO
#### CLI
```bash
$ deep --help
```
TODO