[Python-Dev] PEP 3144 review. (original) (raw)

Guido van Rossum guido at python.org
Mon Sep 28 16:56:29 CEST 2009


On Mon, Sep 28, 2009 at 7:42 AM, Dj Gilcrease <digitalxero at gmail.com> wrote:

On Mon, Sep 28, 2009 at 8:04 AM, Daniel Stutzbach <daniel at stutzbachenterprises.com> wrote:

On Mon, Sep 28, 2009 at 7:24 AM, Nick Coghlan <ncoghlan at gmail.com> wrote:

I should note that I've softened my position slightly from what I posted yesterday. I could live with the following compromise:  >>> x = IPv4Network('192.168.1.1/24')  >>> y = IPv4Network('192.168.1.0/24')  >>> x == y # Equality is the part I really want to see changed  True  >>> x.ip  IPv4Address('192.168.1.1')  >>> y.ip  IPv4Address('192.168.1.0') With those semantics, IPv4Network objects with distinct IP addresses (but the same network) could no longer be stored in a dictionary or set.  IMO, it is a little counter-intuitive for objects to compare equal yet have different properties.  I don't think this is a good compromise. Thats not true, the patch I submitted http://codereview.appspot.com/124057 still allows the networks to be included in a set or as a dict key net1 = IPNetwork("10.1.2.3/24") net2 = IPNetwork("10.1.2.0/24") print hash(net1) == hash(net2) False print net1 == net2 True

Hold it right there! That's wrong. You can't have two objects that compare equal but whose hashes differ. It will break dict lookup. The other way around is fine: two objects may differ and still have the same hash.

test = {net1: "something", net2: "something else"} print test {IPv4Network('10.1.2.0/24'): 'something else', IPv4Network('10.1.2.3/24'): 'something'} test2 = set([net1, net2]) print test2 set([IPv4Network('10.1.2.0/24'), IPv4Network('10.1.2.3/24')])


Python-Dev mailing list Python-Dev at python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/guido%40python.org

-- --Guido van Rossum (home page: http://www.python.org/~guido/)



More information about the Python-Dev mailing list