Faits:
A. Depuis 1974, H.Y._ est locataire d'un appartement sis au chemin de Roches ..., à Genève, près de la limite des quartiers des Eaux-Vives et de Champel; F.Y._ est devenue ultérieurement colocataire. X._ SA est propriétaire de l'immeuble. Depuis le 1er juillet 2001, le loyer, charges non comprises, s'élève à 7'824 fr. par an, soit 652 fr. par mois. Comprenant quatre pièces et occupant 83 m2, l'appartement est situé au premier étage de l'immeuble, construit en 1935; il comprend un hall d'entrée, des fenêtres à vitrage simple, une cuisine agencée mais pas équipée et des dépendances; il ne bénéficie pas d'une place de parc. Le bâtiment, dont l'état général est qualifié de moyen, est équipé du chauffage central, d'un ascenseur et du téléréseau collectif. Il est situé sur le carrefour où convergent et se croisent la rue de la Terrassière - sur laquelle circule le tram -, la rue du 31-Décembre, l'avenue Théodore-Weber et le chemin de Roches; les nuisances sonores sont importantes. Il y a des commerces, des restaurants, des transports publics, des écoles et des jardins publics à proximité.
Par avis officiel du 6 juin 2007, X._ SA a résilié le bail pour le 30 septembre 2007. Le congé a été signifié pour des motifs économiques, afin de relouer l'appartement à un tiers pour un loyer supérieur.
B. H. Y._ et F.Y._ ont saisi la Commission de conciliation d'une requête en annulation de congé.
Non conciliée, l'affaire a été portée devant le Tribunal des baux et loyers du canton de Genève. En cours de procédure, la bailleresse a produit les fiches comparatives de trente-sept appartements. Par jugement du 20 novembre 2008, le tribunal a annulé le congé. Il a retenu qu'aucun des exemples fournis par la bailleresse n'était comparable à l'appartement en cause, pour des motifs divers tels que des différences de surface, d'état d'entretien, d'année de construction ou d'équipement. Comme la bailleresse n'avait pas été en mesure de produire les cinq exemples comparatifs exigés par la jurisprudence, elle n'avait pas démontré que le loyer payé par les locataires était inférieur aux loyers usuels du quartier et qu'elle pouvait ainsi obtenir un loyer plus élevé non abusif d'un nouveau locataire. Le tribunal a donc admis que le congé notifié le 6 juin 2007 contrevenait à la bonne foi.
Saisie par la bailleresse, la Chambre d'appel en matière de baux et loyers du canton de Genève a confirmé le jugement de première instance dans un arrêt du 19 juin 2009, avec une motivation partiellement différente. En effet, elle a d'emblée écarté de la comparaison les objets qui étaient situés en dehors d'un périmètre délimité par la rue Mussard, la route de Malagnou, la rue de Villereuse, la rue de Jargonnant et le début de la route de Frontenex jusqu'à la rue Viollier. Selon la cour cantonale, les appartements sis hors de ce périmètre se trouvent dans des tissus urbains différents: le quartier des Eaux-Vives, compris entre la route de Frontenex et le quai Gustave-Ador, est composé d'immeubles du dix-neuvième siècle inscrits dans un urbanisme de la même époque; le quartier de Champel, allant de la route de Malagnou au chemin des Crêts-de-Champel, a un caractère résidentiel plus marqué et subit moins de nuisances sonores; les autres exemples se trouvent à une distance trop grande pour permettre une comparaison raisonnable. En conséquence, la Chambre d'appel a examiné uniquement les sept objets présentés par la bailleresse se situant dans le périmètre précité. Pour des motifs divers, elle est arrivée à la conclusion qu'aucun de ces éléments ne pouvait être comparé avec l'appartement dont le bail a été résilié.
C. X._ SA interjette un recours en matière civile. Elle conclut principalement à ce qu'il soit constaté que le bail a été valablement résilié avec effet au 30 septembre 2007 et à ce qu'aucune prolongation de bail ne soit accordée aux locataires; à titre subsidiaire, elle demande le renvoi de la cause à la cour cantonale.
H. Y._ et F.Y._ proposent le rejet du recours.
La cour de céans a délibéré sur le recours en séance publique.

Considérant en droit:
1. 1.1 Les contestations portant sur l'usage d'une chose louée sont de nature pécuniaire; elles ne peuvent donc être soumises au Tribunal fédéral, par un recours en matière civile, que si elles atteignent la valeur litigieuse prescrite par la loi. En matière de droit du bail à loyer, cette valeur s'élève à 15'000 fr. (<ref-law>).
En cas de litige portant sur la résiliation d'un bail, la valeur litigieuse se détermine selon le loyer dû pour la période durant laquelle le contrat subsiste nécessairement, en supposant que l'on admette la contestation, et qui s'étend jusqu'au moment pour lequel un nouveau congé aurait pu être donné ou l'a été effectivement. Pour déterminer la prochaine échéance possible, il faut donc supposer que l'on admette la contestation, c'est-à-dire que le congé litigieux ne soit pas valable. Lorsque le bail bénéficie de la protection contre les congés conférée par les <ref-law>, il convient, sauf exceptions, de prendre en considération la période de trois ans prévue à l'art. 271a al. 1 let. e CO (arrêt 4A_130/2008 du 26 mai 2008 consid. 1.1, in SJ 2008 I p. 461; arrêt 4A_472/2007 du 11 mars 2008 consid. 1.1 et les références).
Le loyer annuel de l'appartement en cause s'élève à 7'824 fr. de sorte que la valeur litigieuse, correspondant à trois ans de loyer, est supérieure au montant de 15'000 fr. exigé par l'<ref-law>.
1.2 Pour le surplus, émanant de la partie qui a succombé en instance cantonale (<ref-law>), et dirigé contre une décision finale (<ref-law>) rendue en matière civile (<ref-law>) par une autorité cantonale de dernière instance (<ref-law>), le recours est recevable, puisqu'il a été déposé dans le délai (<ref-law> en liaison avec l'art. 45 al. 1 et l'<ref-law>) et la forme (<ref-law>) prévus par la loi.
1.3 Le recours en matière civile peut être interjeté pour violation du droit, tel qu'il est délimité par les art. 95 et 96 LTF. Le Tribunal fédéral n'entre pas en matière sur la violation d'un droit de rang constitutionnel ou sur une question afférente au droit cantonal ou intercantonal si le grief n'a pas été invoqué et motivé de manière détaillée par la partie recourante (<ref-law>). Pour le reste, il applique le droit d'office (<ref-law>), sans être limité par les arguments soulevés dans le recours ni par la motivation retenue dans la décision déférée; il peut donc admettre un recours pour d'autres motifs que ceux qui ont été articulés, ou à l'inverse, rejeter un recours en adoptant une argumentation différente de celle de l'autorité précédente (<ref-ruling> consid. 1.4 p. 400; <ref-ruling> consid. 1.1 p. 104). Cependant, compte tenu de l'exigence de motivation contenue à l'art. 42 al. 1 et 2 LTF, sous peine d'irrecevabilité (<ref-law>), le Tribunal fédéral n'examine en principe que les griefs invoqués; il n'est pas tenu de traiter, comme le ferait une autorité de première instance, toutes les questions juridiques qui se posent, lorsque celles-ci ne sont plus discutées devant lui (<ref-ruling> consid. 1.4 p. 400; <ref-ruling> consid. 1.1 p. 105).
Par ailleurs, le Tribunal fédéral conduit son raisonnement juridique sur la base des faits établis par l'autorité précédente (<ref-law>). Il ne peut s'en écarter que si les constatations de l'autorité précédente ont été établies de façon manifestement inexacte - notion qui correspond à celle d'arbitraire au sens de l'art. 9 Cst. (<ref-ruling> consid. 1.5 p. 130, 397 consid. 1.5 p. 401; <ref-ruling> consid. 8.1 p. 153) - ou en violation du droit au sens de l'<ref-law> (<ref-law>), et pour autant que la correction du vice soit susceptible d'influer sur le sort de la cause (<ref-law>). Aucun fait nouveau ni preuve nouvelle ne peut être présenté à moins de résulter de la décision de l'autorité précédente (<ref-law>).
2. En premier lieu, la recourante invoque une violation de l'<ref-law>. Cette disposition précise qu'un loyer n'est en principe pas abusif s'il se situe dans les limites des loyers usuels dans la localité ou dans le quartier.
2.1 Un congé motivé, comme en l'espèce, exclusivement par la volonté du bailleur d'obtenir d'un nouveau locataire un loyer plus élevé que le loyer payé par le locataire dont le bail est résilié ne contrevient en principe pas aux règles de la bonne foi (cf. <ref-law>). Pour être valable, une résiliation dictée par des considérations d'ordre économique ne doit toutefois pas servir de prétexte à la poursuite d'un but illicite. Il faut donc que le bailleur soit en mesure d'exiger du nouveau locataire un loyer supérieur au loyer payé jusque-là par le preneur congédié. En d'autres termes, le congé est annulable si l'application de la méthode de calcul absolue permet d'exclure l'hypothèse que le bailleur puisse majorer légalement le loyer, notamment parce que celui-ci est déjà conforme aux loyers usuels dans le quartier (<ref-law>) (cf. <ref-ruling> consid. 3b/bb p. 110; plus récemment, arrêt 4A_472/2007 du 11 mars 2008 consid. 2.1 et 2.2). En l'occurrence, il s'agit de déterminer si une augmentation du loyer est possible en application de la méthode absolue. Ce point n'est pas contesté.
2.2 Le grief de la recourante se rapporte à la détermination des loyers usuels dans le quartier. La bailleresse reproche à la Chambre d'appel d'avoir défini de manière trop restrictive la notion de «quartier» figurant à l'<ref-law> et reprise à l'art. 11 de l'ordonnance sur le bail à loyer et le bail à ferme d'habitations et de locaux commerciaux (OBLF; RS 221.213.11), en retenant un périmètre extrêmement réduit d'environ quatorze hectares, qui ne couvre même pas 1 % de la surface de la ville de Genève, et en ne tenant aucun compte du découpage administratif de la ville en seize quartiers. La recourante relève en outre que ce périmètre exigu englobe deux musées, une école et un parc, ce qui rend la comparaison avec cinq autres appartements exigée par la jurisprudence d'autant plus difficile, pour ne pas dire impossible.
2.2.1 Il convient de déterminer ce que la loi entend par quartier, notion qui relève du droit.
La référence au quartier mentionné à l'<ref-law> a été reprise de l'art. 15 al. 1 let. a AMSL (RO 1972 II 1531). Le terme de quartier figure également dans la version allemande de l'<ref-law> ("quartierüblichen Mietzinse"). Aucune définition ne ressort des textes légaux ni des travaux législatifs. Le Tribunal fédéral n'a guère eu à se pencher sur cette notion. Il a précisé toutefois que des immeubles pouvaient faire partie du même quartier bien qu'ils soient situés dans des secteurs de la ville ayant des codes postaux différents (<ref-ruling> consid. 4b/ee p. 322).
Le terme quartier, désignant la quatrième partie d'un tout, a été transposée sur les villes romaines planifiées, qui étaient partagées en quatre parties par deux routes perpendiculaires se croisant en leur milieu (Viertel en allemand). Dans son acception actuelle, le quartier désigne la division administrative d'une ville ou la partie d'une ville, qui a sa physionomie propre et une certaine unité (cf. Le Grand Robert de la langue française). S'il forme un ensemble sur les plans historique, géographique, sociologique ou administratif, un quartier suppose également une certaine étendue et ne peut guère se limiter à quelques immeubles ou pâtés de maisons.
Aucun motif ne justifie de retenir à l'<ref-law> une notion plus restreinte du quartier. En particulier, celui-ci ne se réduit pas à un complexe architectural homogène. A cet égard, l'<ref-law>, qui précise comment calculer les loyers usuels du quartier, prescrit de prendre en compte notamment l'emplacement et l'année de construction des objets présentés à la comparaison; cela atteste que, pour faire partie d'un même quartier au sens du droit du bail, les immeubles n'ont pas nécessairement à bénéficier d'une situation semblable, ni à dater de la même période de construction. L'idée est bien plutôt que le quartier couvre une certaine surface et qu'il peut être hétérogène (dans ce sens: Peter Higi, Zürcher Kommentar, 4e éd. 1998, n° 34 ad <ref-law>). Il est à relever par ailleurs que l'<ref-law> met sur le même plan «localité» et «quartier». Or, par localité, on entend un village ou une petite ville, soit précisément une entité pouvant avoir une certaine étendue et comporter différents types de bâtiments.
Le découpage administratif de la ville ou la division en quartiers historiques sera souvent déterminant. Mais des exceptions à cette règle sont envisageables, par exemple lorsque l'objet dont le loyer doit être examiné est situé à la limite de deux quartiers (cf. SVIT-Kommentar, 3e éd. 2008, n° 11 ad art. <ref-law>, p. 554; Higi, op. cit., nos 33 et 35 ad <ref-law>). Il n'est ainsi guère possible de poser une règle générale à ce sujet; par rapport à un objet donné, la délimitation de la portion de territoire à prendre en compte à titre de quartier dépendra essentiellement de la situation de fait et de l'histoire des lieux.
Pour ces motifs, l'autorité cantonale est, de par sa connaissance des circonstances locales, la mieux à même de cerner le quartier dans un cas particulier. Le Tribunal fédéral n'interviendra qu'avec retenue, lorsqu'il ressort de la décision cantonale que l'autorité précédente a méconnu la notion de quartier ou n'en a pas tenu compte, qu'elle s'est fondée sur des faits qui ne devaient jouer aucun rôle ou, au contraire, qu'elle n'a pas pris en considération des faits pertinents, ou encore qu'elle a abouti à un résultat manifestement erroné (cf. <ref-ruling> consid. 3.3. i.f. p. 762).
2.2.2 En l'espèce, la Chambre d'appel a examiné uniquement les objets comparatifs sis dans le périmètre précité, au milieu duquel se trouve l'appartement occupé par les intimés. Elle a considéré que les autres objets présentés, situés dans des «tissus urbains différents», ne relevaient pas du même quartier au sens de l'<ref-law> et pouvaient d'emblée être éliminés de la comparaison.
Le périmètre défini par la cour cantonale a plus ou moins la forme d'un triangle avec des côtés mesurant respectivement 400, 500 et 600 mètres environ. Il ne correspond ni à un quartier historique, ni à une entité administrative. Sa superficie est nettement plus restreinte que celle des quartiers proches des Eaux-Vives et de Champel. La Chambre d'appel a écarté la partie du quartier des Eaux-Vives située au nord du périmètre susmentionné, au motif qu'elle est composée d'immeubles du dix-neuvième siècle inscrits dans un urbanisme de la même époque. Elle a écarté le quartier de Champel, sis au sud du périmètre retenu, au motif qu'il a un caractère résidentiel plus marqué et qu'il est moins soumis à des nuisances sonores. Ce faisant, la cour cantonale a apparemment exclu ces secteurs de la ville sur la base d'une appréciation globale, parce qu'ils semblent moins susceptibles de receler des appartements comparables à celui occupé par les intimés. Il ne s'agit pas là d'un critère définissant le quartier au sens de l'<ref-law>. Un tel mode de procéder revient à déclarer d'emblée non comparables tous les objets sis dans ces secteurs, sans avoir à examiner concrètement s'ils le sont au regard des critères de l'<ref-law>. La Chambre d'appel ne pouvait pas restreindre de la sorte les possibilités de la recourante de présenter des objets comparatifs. Il lui appartenait de définir d'abord le quartier indépendamment des critères de comparaison fixés à l'<ref-law>, puis d'examiner, sur la base de ces critères, les objets comparatifs présentés par la recourante qui sont situés dans le quartier tel que précédemment défini. Le grief tiré de la violation de l'<ref-law> est fondé.
3. La recourante reproche également à la Chambre d'appel d'avoir violé l'<ref-law> et l'<ref-law> lors de l'examen de six des sept objets comparatifs pris en considération (objets nos 13, 16, 17, 23, 33 et 36, à l'exception de l'objet n° 42 dont la recourante reconnaît elle-même qu'il ne peut servir à la comparaison). Le moyen n'est pas devenu sans objet. En effet, le Tribunal fédéral peut éventuellement éviter un renvoi et statuer lui-même au fond s'il arrive à la conclusion que cinq de ces six objets sont effectivement comparables à l'appartement occupé par les intimés (cf. consid. 3.1 infra).
3.1 Selon l'<ref-law>, les loyers déterminants pour la constatation des loyers usuels, dans la localité ou le quartier, sont ceux des logements comparables à la chose louée, quant à leur emplacement, dimension, équipement, état et année de construction (al. 1), à l'exclusion des loyers résultant du fait qu'un bailleur ou un groupe de bailleurs domine le marché (al. 3). En règle générale, le juge doit disposer de cinq éléments de comparaison au moins. Il lui appartient de procéder à des comparaisons concrètes. L'autorité cantonale de dernière instance indiquera exactement les critères sur lesquels elle s'est fondée. Sur cette base, le Tribunal fédéral contrôle librement si les loyers usuels sont établis conformément au droit fédéral (<ref-ruling> consid. 4a p. 319; arrêt 4C.265/2000 du 16 janvier 2001 consid. 4a, in SJ 2001 I p. 247). Les loyers de référence doivent eux-mêmes ne pas être abusifs; il est donc nécessaire, en principe, de les adapter aux baisses du taux hypothécaire survenues depuis le moment où ils ont été fixés (<ref-ruling> consid. 5a p. 412 ss).
Aux termes de l'<ref-law>, le juge établit d'office les faits et les parties sont tenues de lui soumettre toutes les pièces nécessaires. Selon la jurisprudence relative à cette disposition, le juge n'a pas à instruire d'office le litige lorsqu'un plaideur renonce à expliquer sa position, mais il doit interroger les parties et les informer de leur devoir de collaborer à l'instruction et de fournir des preuves. Si des motifs objectifs le conduisent à soupçonner que les allégations et offres de preuves d'une partie sont lacunaires, il doit inviter cette partie à compléter ses moyens (<ref-ruling> consid. 4a p. 238 s.).
3.2 Les six éléments de comparaison invoqués par la recourante doivent être examinés à l'aune de ces principes.
3.2.1 La Chambre d'appel a écarté l'appartement de quatre pièces et 97 m2 situé dans l'immeuble sis à la route de Frontenex ... (objet n° 13), dont le loyer mensuel est de 1'600 fr., notamment parce que le bâtiment, construit en 1957, est plus récent que celui abritant l'appartement occupé par les intimés, construit en 1935.
Selon la jurisprudence, des immeubles datant des deux premières décennies du vingtième siècle sont comparables sous l'angle de l'année de construction (<ref-ruling> consid. 4b/aa p. 320). Par la suite, le Tribunal fédéral a précisé qu'une différence de plus de vingt ans ne permettait en tout cas pas de ranger deux bâtiments dans la même période de construction (arrêt 4C.40/2001 du 15 juin 2001 consid. 5c/bb). Un assouplissement de la règle des vingt ans ne se justifie pas. En effet, un certain schématisme s'impose dans ce domaine, afin d'assurer la prévisibilité du droit et l'égalité de traitement.
En l'espèce, l'immeuble de la route de Frontenex ... a été construit vingt-deux ans après celui abritant le logement des intimés. Une telle différence suffit à exclure la comparaison entre les deux appartements. La cour cantonale n'a pas violé le droit fédéral en écartant l'objet n° 13.
3.2.2 Les juges genevois ont éliminé de la comparaison l'appartement de quatre pièces et 87 m2 situé dans l'immeuble sis au chemin de Roches ... (objet n° 16), dont le loyer mensuel est de 1'407 fr., en raison de l'absence de référence au taux hypothécaire sur la base duquel le loyer avait été fixé.
Bien qu'elle n'ait pas relevé d'autre motif excluant une comparaison, la cour cantonale n'a pas invité la recourante à compléter ses allégations avant de fonder sa décision sur cette seule omission. Ce faisant, elle a violé la maxime d'office. La Chambre d'appel a dès lors méconnu le droit fédéral en refusant de prendre en considération l'objet n° 16 pour le motif invoqué.
3.2.3 La cour cantonale a écarté l'appartement de quatre pièces et demie et 96 m2 situé dans le bâtiment sis à la rue Henri-Mussard ... (objet n° 17), dont le loyer mensuel est de 1'545 fr., notamment parce que ledit immeuble disposait d'un parking, contrairement à celui abritant l'appartement des intimés.
Le fait de bénéficier d'une place de parc à proximité de son logement est un avantage indéniable, particulièrement dans une grande ville comme Genève où le stationnement est notoirement difficile. Cette différence notable dans l'équipement au sens large justifie déjà de ne pas considérer les deux objets comme comparables. Les juges genevois n'ont pas violé le droit fédéral à cet égard.
3.2.4 La Chambre d'appel a écarté l'appartement de quatre pièces et 82 m2 situé dans l'immeuble sis à la rue Viollier ... (objet n° 23), dont le loyer mensuel est de 1'150 fr., au motif notamment que ses fenêtres ont un double vitrage, contrairement à celles de l'appartement des intimés. Cela peut suffire pour exclure la comparaison (cf. arrêt 4C.265/2000 du 16 janvier 2001 consid. 4b/dd, in SJ 2001 I 247). Au demeurant, l'immeuble de la rue Viollier ... bénéficie de places de parc, ce qui, on l'a vu, n'est pas le cas de l'immeuble abritant l'appartement des intimés (cf. consid. 3.2.3 supra). Par conséquent, l'objet n° 23 a été exclu à bon droit de la comparaison.
3.2.5 La cour cantonale n'a pas pris en compte l'appartement de trois pièces et 76 m2 situé dans l'immeuble sis à la rue Viollier ... (objet n° 33), dont le loyer mensuel est de 994 fr., au motif notamment qu'il comportait une pièce de moins que l'appartement loué par les intimés.
Selon la jurisprudence, la différence d'une pièce ne permet pas la comparaison lorsque, comme en l'espèce, les appartements en jeu sont plutôt petits (cf. <ref-ruling> consid. 4a/cc p. 321). Pour remettre en cause cette jurisprudence, il ne suffit pas de se référer, comme le fait la recourante, à une «conception contemporaine» selon laquelle le nombre de m2 serait aussi, voire davantage déterminant que le nombre de pièces; il y a d'autant moins de motifs de le faire que les deux appartements ont des surfaces légèrement différentes. L'élimination de la comparaison de l'objet n° 33 n'est pas contraire au droit fédéral.
3.2.6 La Chambre d'appel a écarté l'appartement de trois pièces et demie et 71 m2 situé dans l'immeuble sis à la rue Henri-Mussard ... (objet n° 36), dont le loyer mensuel est de 1'430 fr., pour le seul motif qu'il est au cinquième étage alors que l'appartement des intimés est au premier étage.
A ce propos, le Tribunal fédéral a déjà eu l'occasion de souligner que le critère de l'étage n'est retenu, en tant que tel, ni dans la loi ni par la jurisprudence, de sorte qu'il n'apparaît pas nécessairement pertinent (arrêt 4C.55/2001 du 4 juillet 2001 consid. 4b/cc, non publié in <ref-ruling>). La cour de céans statue uniquement sur la base des faits retenus dans la décision attaquée (<ref-law>). En l'espèce, les juges cantonaux n'ont, en particulier, pas constaté que l'immeuble de la rue Henri-Mussard ... n'est pas équipé d'un ascenseur. Sans autres détails, il n'est, en l'état, pas possible de juger si la différence d'étage constatée exclut réellement de comparer les deux appartements; le cas échéant, une inspection locale sera nécessaire (cf. David Lachat, Le bail à loyer, 2008, p. 462).
3.3 En résumé, sur les sept objets pris en considération par la cour cantonale, il est établi que cinq appartements (nos 13, 17, 23, 33 et 42) ne sont pas comparables au logement occupé par les intimés. Dans ces circonstances, la recourante n'a pas, à ce stade, réuni les cinq exemples exigés par la jurisprudence qui lui auraient permis de démontrer que le loyer payé par les intimés est inférieur aux loyers usuels du quartier.
4. La recourante se plaint enfin d'une violation de l'<ref-law> aux termes duquel les statistiques officielles doivent être prises en considération. Dans un arrêt rendu en séance publique, le Tribunal fédéral a jugé récemment que les statistiques genevoises ne remplissaient pas les conditions de cette disposition (arrêt 4A_472/2007 du 11 mars 2008). En l'état, il n'y a pas à revenir sur cette jurisprudence.
5. Sur le vu de ce qui précède, le recours doit être admis partiellement. L'arrêt attaqué sera annulé et la cause renvoyée à la Chambre d'appel pour nouvelle décision. Il appartiendra à la cour cantonale, notamment, de déterminer si des éléments comparatifs qu'elle avait écartés d'emblée peuvent être considérés comme compris dans le même quartier que l'appartement loué par les intimés et, le cas échéant, de procéder à la comparaison concrète.
6. La recourante n'obtient que partiellement gain de cause puisque seule sa conclusion subsidiaire est admise. Dans ces conditions, il se justifie de partager les frais de la procédure fédérale de manière égale entre les parties (<ref-law>). Par ailleurs, les dépens seront compensés (<ref-law>).

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est partiellement admis, l'arrêt attaqué est annulé et l'affaire est renvoyée pour nouvelle décision à la Chambre d'appel en matière de baux et loyers du canton de Genève.
2. Les frais judiciaires, arrêtés à 2'000 fr., sont mis par moitié à la charge de la recourante et par moitié à la charge des intimés, solidairement entre eux.
3. Il n'est pas alloué de dépens.
4. Le présent arrêt est communiqué aux mandataires des parties et à la Chambre d'appel en matière de baux et loyers du canton de Genève.
Lausanne, le 15 décembre 2009
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente: La Greffière:
Klett Godat Zimmermann