From: SourceForge.net <no...@so...> - 2006-11-24 16:29:22
|
Bugs item #222789, was opened at 2000-11-18 18:46 Message generated for change (Comment added) made by gbgbgb50 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112867&aid=222789&group_id=12867 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Core Group: Deferred Status: Closed Resolution: Fixed Priority: 1 Private: No Submitted By: Finn Bock (bckfnn) Assigned to: Samuele Pedroni (pedronis) Summary: __builtin__.id() does not return unique values for different Initial Comment: According to the Python library documentation, the "id" builtin function will return unique integers for different objects. The documentation for java's hashCode makes no such garantee. The new hotspot VM change the behavior of the JDK and the hashCode (and identifyHashCode) function can return the same integer for different objects. pickle.py assumes that id() returns unique values. ======= From Python docs "__builtin__.id()"========= Return the `identity' of an object. This is an integer which is guaranteed to be unique and constant for this object during its lifetime. ======= From Java docs "Object.hashCode()" ========= As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.) --------- FILE: test099.py --------- d = {} for i in xrange(100000): s = "test" + `i` j = id(s) if d.has_key(j): print "Duplicate id %s<%d> & %s<%d>" % (s, j, d[j], id(d[j])) d[j] = s --------- END --------- ---------------------------------------------------------------------- Comment By: gunter bach (gbgbgb50) Date: 2006-11-24 16:29 Message: Logged In: YES user_id=866995 Originator: NO I do get many duplicates (137) when running test099.py! I came across this bug, when I was trying to debug my own application which yields very strange results when deep-copying a dictionary many times... Looks for me like this id()-bug is the reason. I ran the test099.py on windows jdk1.6.0-beta and on two different debian-boxes, both java version "1.5.0_03". Ah, and I used the jython2.1-relase. yours Gunter ---------------------------------------------------------------------- Comment By: Samuele Pedroni (pedronis) Date: 2006-09-18 19:58 Message: Logged In: YES user_id=61408 mark as fixed because it actually was ---------------------------------------------------------------------- Comment By: Samuele Pedroni (pedronis) Date: 2006-09-07 11:12 Message: Logged In: YES user_id=61408 this was fixed by me using an object->id mapping quite some time ago. ---------------------------------------------------------------------- Comment By: Charles Groves (cgroves) Date: 2006-09-07 04:45 Message: Logged In: YES user_id=1174327 Has anyone ever seen test099.py fail? Since we haven't seen an actual bug from this in 6 years, I'm going make this pending won't fix. ---------------------------------------------------------------------- Comment By: Finn Bock (bckfnn) Date: 2000-11-26 13:07 Message: Tim Peters think this should be solved even if it mean that every object should carry some id field around in PyObject. I think we can live with this difference. Since I trust Tim more then I trust myself I keep the bug open for now. See the python-dev archives for the discussion. http://www.python.org/pipermail/python-dev/2000-June/thread.html#22346 ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112867&aid=222789&group_id=12867 |