Could you please explain what " a is not None" means? I often see it in Django. As far as I understand we use operator "is" to check whether two variables point to the same place in RAM. Does None mean that there is some space reserved for something but doesn't have any type yet? In what circumstance could Django expect this situation? And second.... if a= 256 and b = 256 (till and eq 256)... if we ask "a is b" ==> True. Python tries to spare some space and does this for numbers less and = 256. In case of a = 257 and b = 257 ==> "a is b" ==> False. it's understandable. But if I try to do the same with strings ... for example a = "abc56" and b = "abc56" ==> "a is b" also True. Why? didn't assigned b = a. But I get True. Thank you in advance.