Following on from [this](https://stackoverflow.com/questions/7646520/is-this-an-appropriate-use-of-pythons-built-in-hash-function) question, I'm interested to know when is a python object's hash *computed*? 

1. At an instance's `__init__` time,
2. The first time `__hash__()` is called,
3. Every time `__hash__()` is called, or
4. Any other opportunity I might be missing?

May this vary depending on the type of the object?

Why does `hash(-1) == -2` whilst other integers are equal to their hash?