"x is y" means "id(y) == id(y)" "x is not y" means "id(x) != id(x)" "x is not None" means "id(x) != id(None)" "x is not None" is a really silly statement!! because id(None) and id of any constant object is not predictable! I don't know whay people use "is" instead of "==". you should write "if x!=None" instead of "x is not None"