For instance, take this piece of code:
var person = new Person();
or for you Pythonistas:
person = Person()
I
The reason it is considered bad is if you need to have 2 Person's in the future, you can then end up with code that looks like.
Person person = new Person();
Person person2 = new Person();
That would then be bordering on "Bad". However, in that case you should then refactor your orginal person in order to distinguish between the two.
As for your example, the variable name "person" is a perfectly descriptive name for the object "Person". Therefore there is nothing wrong with it whatsoever.