Path: csiph.com!news.redatomik.org!news.izac.org!reader From: Benoit Izac Newsgroups: fr.comp.lang.python Subject: Re: remplir un tableau Date: Wed, 31 Jan 2018 18:50:47 +0100 Message-ID: <87a7wtvrwo.fsf@izac.org> References: <5a6fa2b6$0$7180$426a74cc@news.free.fr> <87efm7vpge.fsf@izac.org> <5a71dd90$0$3420$426a74cc@news.free.fr> Reply-To: benoit.izac@free.fr Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Injection-Info: keg.izac.org; logging-data="12405"; mail-complaints-to="usenet@izac.org" Xref: csiph.com fr.comp.lang.python:3037 Bonjour, Le 31/01/2018 à 16:15, Fabrice a écrit dans le message <5a71dd90$0$3420$426a74cc@news.free.fr> : >>>>> image = [[0]*50]*50 >>>>> id(image[0]) >> 140001800012424 >>>>> id(image[1]) >> 140001800012424 >> >> Alors qu'en faisant comme cela : >> >>>>> image = [[0]*50 for _ in range(50)] >>>>> id(image[0]) >> 140001800012936 >>>>> id(image[1]) >> 140001800012744 > > > je suis surpris que [[0]*50]*50 et [[0]*50 for _ in range(50)] ne > fassent pas la même chose ! [[0]*50]*50 : je crée un objet de type int qui vaut 0, puis une liste de 50 éléments qui référencent tous cet objet int(0), puis une liste de 50 éléments qui référencent tous cette unique liste [0]*50. [[0]*50 for _ in range(50)] : je fais 50 fois "je crée un objet de int qui vaut 0, puis une liste de 50 éléments qui référencent tous cet objet int(0)" et je mets à chaque fois la référence dans une liste. C'est donc équivalent à : l = [] for _ in range(50): l.append([0]*50) -- Benoit Izac