diff --git a/Lib/_weakrefset.py b/Lib/_weakrefset.py
index 0046133..addc7af 100644
--- a/Lib/_weakrefset.py
+++ b/Lib/_weakrefset.py
@@ -118,6 +118,8 @@
         return self.data >= set(ref(item) for item in other)
 
     def __eq__(self, other):
+        if not isinstance(other, self.__class__):
+            return NotImplemented
         return self.data == set(ref(item) for item in other)
 
     def symmetric_difference(self, other):
diff --git a/Lib/test/test_weakset.py b/Lib/test/test_weakset.py
index cff2045..4d54576 100644
--- a/Lib/test/test_weakset.py
+++ b/Lib/test/test_weakset.py
@@ -134,13 +134,11 @@
 
     def test_gc(self):
         # Create a nest of cycles to exercise overall ref count check
-        class A:
-            pass
-        s = set(A() for i in range(1000))
+        s = WeakSet(Foo() for i in range(1000))
         for elem in s:
             elem.cycle = s
             elem.sub = elem
-            elem.set = set([elem])
+            elem.set = WeakSet([elem])
 
     def test_subclass_with_custom_hash(self):
         # Bug #1257731
@@ -169,17 +167,12 @@
         t = WeakSet(s)
         self.assertNotEqual(id(s), id(t))
 
-    def test_set_literal(self):
-        s = set([1,2,3])
-        t = {1,2,3}
-        self.assertEqual(s, t)
-
     def test_hash(self):
         self.assertRaises(TypeError, hash, self.s)
 
     def test_clear(self):
         self.s.clear()
-        self.assertEqual(self.s, set())
+        self.assertEqual(self.s, WeakSet([]))
         self.assertEqual(len(self.s), 0)
 
     def test_copy(self):
@@ -304,6 +297,16 @@
         t ^= t
         self.assertEqual(t, WeakSet())
 
+    def test_eq(self):
+        # issue 5964
+        self.assertTrue(self.s == self.s)
+        self.assertTrue(self.s == WeakSet(self.items))
+        self.assertFalse(self.s == set(self.items))
+        self.assertFalse(self.s == list(self.items))
+        self.assertFalse(self.s == tuple(self.items))
+        self.assertFalse(self.s == WeakSet([Foo]))
+        self.assertFalse(self.s == 1)
+
 
 def test_main(verbose=None):
     support.run_unittest(TestWeakSet)
