On 11/11/2011 09:35, Jonathan wrote:
On 11/11/2011 09:24, Duncan Booth wrote:
pick keys that that hash to the same value modulo the size of the
dictionary. Since the dictionary copy copies the keys in the order
they are stored you will get the same hash conflict in the copy as
the original.
Brilliant, thank-you. So I was just being 'lucky' in my choices of
dict keys. I believe this is the answer I am looking for. René &
Ross's point about being mindful of different implementations is still
very pertinent in my mind, but I'm happy for now.
Thanks everyone!
Jonathan
For completeness, my final test is therefore:
def test_not_dependant_on_order_of_kwargs(self):
calls = []
@memoize
def counter(**kwargs):
calls.append(1)
for first in ascii_letters:
for second in ascii_letters:
forward = {first:0, second:0}
reverse = {second:0, first:0}
del calls[:]
counter(**forward)
counter(**reverse)
self.assertEqual(len(calls), 1,
'%d for %s,%s' % (len(calls), first, second))
Without the 'sorted', this fails with:
======================================================================
FAIL: test_not_dependant_on_order_of_kwargs (__main__.MemoizeTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./test.py", line 58, in test_not_dependant_on_order_of_kwargs
'%d for %s,%s' % (len(calls), first, second))
AssertionError: 2 for a,i
----------------------------------------------------------------------
Jubilant!
Jonathan
--
Jonathan Hartley tart...@tartley.com http://tartley.com
Made of meat. +44 7737 062 225 twitter/skype: tartley
_______________________________________________
python-uk mailing list
python-uk@python.org
http://mail.python.org/mailman/listinfo/python-uk