Tombstoning is not transparent to the end user because (according to my quick read of the code; I could not find this documented anywhere) keys are not actually cleared by remove() until growing the map pushes things into a new table.
This bit me when I was using a NBHS to store very large data structures, and it was very frustrating to run out of memory while the Set said it was empty!
If the docs had mentioned this property it would have been clear what was going on.
Also, if print() actually called the private print instead of print2 it would again have been obvious. (Since I believed the docstring saying that the public method indeed revealed the "internal" state this sent me off in the wrong direction for a while.)