diff --git a/mercurial/revset.py b/mercurial/revset.py
index 80628d4069be724089ea487a300d62f4cbd8970d_bWVyY3VyaWFsL3JldnNldC5weQ==..c38e5556d87b0bd3a0d3b3348530ca5b0e8204f6_bWVyY3VyaWFsL3JldnNldC5weQ== 100644
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -522,7 +522,7 @@
     """
     # i18n: "closed" is a keyword
     getargs(x, 0, 0, _("closed takes no arguments"))
-    return baseset([r for r in subset if repo[r].closesbranch()])
+    return lazyset(subset, lambda r: repo[r].closesbranch())
 
 def contains(repo, subset, x):
     """``contains(pattern)``