diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py index b941950..fa40af2 100644 --- a/Lib/collections/__init__.py +++ b/Lib/collections/__init__.py @@ -1042,7 +1042,11 @@ class UserList(MutableSequence): return other.data if isinstance(other, UserList) else other def __contains__(self, item): return item in self.data def __len__(self): return len(self.data) - def __getitem__(self, i): return self.data[i] + def __getitem__(self, i): + if isinstance(i, slice): + return self.__class__(self.data[i]) + else: + return self.data[i] def __setitem__(self, i, item): self.data[i] = item def __delitem__(self, i): del self.data[i] def __add__(self, other): diff --git a/Lib/test/test_userlist.py b/Lib/test/test_userlist.py index 8de6c14..b82df85 100644 --- a/Lib/test/test_userlist.py +++ b/Lib/test/test_userlist.py @@ -59,5 +59,11 @@ class UserListTest(list_tests.CommonTest): self.assertEqual(u, v) self.assertEqual(type(u), type(v)) + def test_userlist_slice(self): + u = self.type2test("spameggs") + v = u[:4] + self.assertEqual(v, list("spam")) + self.assertEqual(type(u), type(v)) + if __name__ == "__main__": unittest.main()