One could even use the constant hash, that would be perfectly valid, but useless. So in general there is a balance or a choice : complex hash that tells many things apart, or simple hash that is not so good.

I think in sage, the hash for parents are not so important. They are required for python3 nevertheless.

I would be happy to give a positive review but I don't know so much about p-adic printers and I would be more comfortable if David confirms that your changes won't break something elsewhere. David, could you do this, please?

A printer's __eq__ is quite complex so I think that hashing the full dict is too much, i.e., it'll give different hashes to printers that are considered equal. Strangely, the printer is not hashable (seems like a bug to me) so I'd not include it into the hash of the ring at all. If it were hashable, we should just include the printer's hash value.

So, I'd drop hash_printer and add a comment that printer's are strangely not hashable. Does that sound Ok to you?