On Thu, 18 Apr 2002, Ian! wrote: > What's the difference between "is" and "=="? I always assumed they were > the same. > > >>> __name__ == '__main__' > 1 > >>> __name__ is '__main__' > 0 Slightly different. '==' can be thought of as "value equality", that is, if two things look the same, == should return a true value. (For those with a Java background, Python's == is actually doing something akin to an equals() method.) 'is' can be thought of as 'object identity', that is, if the two things actually are the same object. The concept is a little subtle, so let's use an example: ### >>> my_name = "danny" >>> your_name = "ian" >>> my_name == your_name 0 ### My name and your name are different. But what about this? ### >>> my_name[1:3] == your_name[1:3] 1 ### Our names share something in common. *grin* We'd say that my_name[1:3] looks the same as your_name[1:3], so they're "equal" in some sense that's captured by the idea of '=='. However, the sources of those strings are different, and we can see this when we check against object identity: ### >>> my_name[1:3] is your_name[1:3] 0 ### 'is' allows us to make the distinction if the system is keeping track of two things that just look alike, or are actually the same thing. Why this is useful isn't too obvious for strings; it's more of an issue when one is dealing with classes or mutable data structures like lists. For now, you probably want to use '==' when you want to compare two things for equality. When you learn about data structures, then 'is' will seem more relevant. Please feel free to ask more questions! Good luck.