Home Accessibility Courses Diary The Mouth Forum Resources Site Map About Us Contact
Equality, sameness and identity - Python

Is the number 7.0 the same as the number 7.00000? A trick question, because it depends on how you look at it. It has the same value, but it is not identical. And if eachof them is held in computer memory, there's no chance at all that they're both the same thing - i.e. held in the same memory location - at the same time.

Does it matter which type of identity you use? Sometimes it does!

a) In Python, if you use the == operator on two objects, it uses the __cmp__ method to compare them, and if that returns 0 they are considered to be the same. This could lead to some quite bizarre situations if you code it that way - you could for example decide that all animals are going to be equal simply by having an __cmp__ method in class animal that returns a zero. From version 2.2 onwards, you can also use a method called __eq__

b) The __str__ method creates a string from an object, and those strings could be compared - that's another form of equality in Python. And although identical objects will always return identical strings (unless you're using a time or random element in creating the string!), it's quite possible than non-identical objects will also return identical strings. So this is NOT going to check if two instance variables point to one and the same object.

c) The "trick" in in the __repr__ method, which has a shorthand in the backquote, Using this method, you can return the official string representation of any object, which includes trhe object's class and its address on the stack. And comparing these strings .. if two instance variables both return an identical string, then you can be reassured (stupid programming excepted!) that the are both instances pointing to the same variable.

I've written an example to show a) b) and c) in use - bring up the source in a separate window here. And you can see the results from running that below. Note that "mydesert" is copy of the "toffeepudding" variable (i.e. a reference to the same thingy) but all the other objects are at different addresses - even though "jamrollypolly" has identical settings to "toffeepudding"

toothpaste: A thingy which is sticky and with an edibility no
toffeepudding: A thingy which is sticky and with an edibility yes
jamrollypolly A thingy which is sticky and with an edibility yes
forum_topic: A thingy which is sticky and with an edibility no
water: A thingy which is wet and with an edibility no
mydesert: A thingy which is sticky and with an edibility yes
 
Use of ==, showing that == does NOT mean identity
Toothpaste and Toffeepudding are equal
Water and Toffeepudding are NOT equal
 
Comparing the print strings - does not test for same object
toothpaste and forum_topic are the same
toffeepudding and mydesert are the same
 
Compare two objects via __repr__ - are they the same object
toffeepudding and mydesert are identical refs to same object
toffeepudding: <__main__.thingy object at 0x68a70>
mydesert: <__main__.thingy object at 0x68a70>
jamrollypolly: <__main__.thingy object at 0x68a90>


It's getting late at night and this talk of food is leaving me rather hungry - I think I'll head off for some "Ice Cream" before "I Scream" at how complex a subject equality is. But I would be very happy to go through it - at length if necessary - on our Python Course
(written 2008-05-31, updated 2008-06-01)

 
Associated topics are indexed under
Y103 - Python - Conditionals and Loops
  [3558] Python or Lua - which should I use / learn? - (2011-12-21)
  [3439] Python for loops - applying a temporary second name to the same object - (2011-09-14)
  [3397] Does a for loop evaluate its end condition once, or on every iteration? - (2011-08-18)
  [3200] How a for loop works Java, Perl and other languages - (2011-03-12)
  [3083] Python - fresh examples from recent courses - (2010-12-11)
  [2899] Groupsave tickets - 3 or 4 train tickets for the price of 2 - (2010-08-02)
  [2778] Learning to program in Python 2 ... and / or in Python 3 - (2010-05-24)
  [1696] Saying NOT in Perl, PHP, Python, Lua ... - (2008-07-04)
  [1477] Decisions - small ones, or big ones? - (2007-12-18)
  [1201] No switch in Python - (2007-05-23)
  [909] Python is like a narrowboat - (2006-10-30)
  [835] Python - when to use the in operator - (2006-08-16)
  [788] New - Conditional expressions in Python 2.5 - (2006-07-01)
  [668] Python - block insets help with documentation - (2006-04-04)
  [657] The ternary operator in Python - (2006-03-25)
  [353] Wimbledon Neck - (2005-06-20)
  [299] What - no switch or case statement? - (2005-05-03)

Y112 - Python - Objects - Intermediate
  [3524] Metaclasses (Python) and Metatables (Lua) - (2011-11-17)
  [3472] Static variables in functions - and better ways using objects - (2011-10-10)
  [3442] A demonstration of how many Python facilities work together - (2011-09-16)
  [3002] A list of special method and attribute names in Python - (2010-10-17)
  [2994] Python - some common questions answered in code examples - (2010-10-10)
  [2905] Defining static methods in Python - (2010-08-05)
  [2889] Should Python classes each be in their own file? - (2010-07-27)
  [2785] The Light bulb moment when people see how Object Orientation works in real use - (2010-05-28)
  [2764] Python decorators - your own, staticmethod and classmethod - (2010-05-14)
  [2722] Mixins example in Python - (2010-04-14)
  [2720] Multiple inheritance in Python - complete working example - (2010-04-14)
  [2717] The Multiple Inheritance Conundrum, interfaces and mixins - (2010-04-11)
  [2693] Methods that run on classes (static methods) in Python - (2010-03-25)
  [2485] How do I set up a constant in Python? - (2009-10-31)
  [2409] TypeError: super() argument 1 must be type, not classobj (Python) - (2009-09-18)
  [2368] Python - fresh examples of all the fundamentals - (2009-08-20)
  [1819] Calling base class constructors - (2008-10-03)
  [1644] Using a utility method to construct objects of different types - Python - (2008-05-17)
  [1517] Python - formatting objects - (2008-01-24)
  [1217] What are factory and singleton classes? - (2007-06-04)
  [1146] __new__ v __init__ - python constructor alternatives? - (2007-04-14)
  [964] Practical polymorphism in action - (2006-12-04)
  [903] Pieces of Python - (2006-10-23)
  [831] Comparison of Object Oriented Philosophy - Python, Java, C++, Perl - (2006-08-13)
  [656] Think about your design even if you don't use full UML - (2006-03-24)
  [477] Class, static and unbound variables - (2005-10-25)
  [383] Overloading of operators on standard objects in Python - (2005-07-19)
  [296] Using a Python dictionary as a holder of object attributes - (2005-04-30)


Back to
Korn shell - some nuggets
Previous and next
or
Horse's mouth home
Forward to
Westonbirt Arboretum Postcode
Some other Articles
Factory method example - Perl
Example of OO in Perl
Python in an afternoon - a lecture for experienced programmers
Westonbirt Arboretum Postcode
Equality, sameness and identity - Python
Korn shell - some nuggets
String, Integer, Array, Associative Array - ksh variables
Some useful variables and settings in the Korn Shell
Farewell, Newcastle to Stavanger, Haugsund and Bergen
Be careful of misreading server statistics
3597 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2012: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/1661_Equ ... ython.html • PAGE BUILT: Fri Feb 3 14:16:04 2012 • BUILD SYSTEM: wizard