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

Reply via email to