Teach the sets module to correctly compute s-=s and s^=s as the empty set.
diff --git a/Lib/sets.py b/Lib/sets.py
index 8ec7e2f..32a0dd6 100644
--- a/Lib/sets.py
+++ b/Lib/sets.py
@@ -480,6 +480,8 @@
         value = True
         if not isinstance(other, BaseSet):
             other = Set(other)
+        if self is other:
+            self.clear()
         for elt in other:
             if elt in data:
                 del data[elt]
@@ -497,6 +499,8 @@
         data = self._data
         if not isinstance(other, BaseSet):
             other = Set(other)
+        if self is other:
+            self.clear()
         for elt in ifilter(data.has_key, other):
             del data[elt]
 
diff --git a/Lib/test/test_sets.py b/Lib/test/test_sets.py
index c5a48b1..ff834e0 100644
--- a/Lib/test/test_sets.py
+++ b/Lib/test/test_sets.py
@@ -243,6 +243,19 @@
         self.assertRaises(TypeError, cmp, a, 12)
         self.assertRaises(TypeError, cmp, "abc", a)
 
+    def test_inplace_on_self(self):
+        t = self.set.copy()
+        t |= t
+        self.assertEqual(t, self.set)
+        t &= t
+        self.assertEqual(t, self.set)
+        t -= t
+        self.assertEqual(len(t), 0)
+        t = self.set.copy()
+        t ^= t
+        self.assertEqual(len(t), 0)
+
+
 #==============================================================================
 
 class TestUpdateOps(unittest.TestCase):