diff -r 554e18a639a5 Lib/ipaddress.py --- a/Lib/ipaddress.py Sat Oct 17 16:25:07 2015 +0300 +++ b/Lib/ipaddress.py Sat Oct 17 16:37:13 2015 +0300 @@ -673,8 +673,10 @@ return False # dealing with another network. if isinstance(other, _BaseNetwork): - return False - # dealing with another address + if self._prefixlen <= other._prefixlen: + return other.network_address._ip & self.netmask._ip == self.network_address._ip + else: + return False else: # address return other._ip & self.netmask._ip == self.network_address._ip diff -r 554e18a639a5 Lib/test/test_ipaddress.py --- a/Lib/test/test_ipaddress.py Sat Oct 17 16:25:07 2015 +0300 +++ b/Lib/test/test_ipaddress.py Sat Oct 17 16:37:13 2015 +0300 @@ -612,10 +613,18 @@ self.assertIn(obj, self.v4net) for obj in self.v6_addresses: self.assertIn(obj, self.v6net) - for obj in self.v4_objects + [self.v6net]: + for obj in self.v4_objects: self.assertNotIn(obj, self.v6net) - for obj in self.v6_objects + [self.v4net]: + for obj in self.v6_objects: self.assertNotIn(obj, self.v4net) + self.assertIn(self.v6net, self.v6net) + self.assertNotIn(ipaddress.IPv6Network("::2/127"), + ipaddress.IPv6Network("::4/127")) + # ip == other ip. should be compared by prefix len + self.assertNotIn(ipaddress.IPv6Network("1::/56"), + ipaddress.IPv6Network("1::/64")) + self.assertIn(ipaddress.IPv6Network("1::/64"), + ipaddress.IPv6Network("1::/56")) def test_mixed_type_ordering(self): for lhs in self.objects: