nums = [1,2,3,4,5] it = iter(nums) print(next(it)) print(next(it)) for i in nums: print(i) here the result is: 1 2 1 2 3 4 5 So my question is that when we apply iter method on a object then does it create a copy of object on which it runs next method?
4 Réponses :
Le Vous ne modifiez pas de variables présentes dans le côté droit d'une ligne d'affectation, une copie de la valeur a une fonction appliquée à celle-ci, puis il est attribué le nouveau nom de variable = code> strong> L'opérateur attribue des valeurs des opérandes latérales à droite aux opérandes latérales gauche "Ie
c = a + b code> attribue la valeur de
a + b code> dans
C code> opérateurs < / p>
IT code> strong>. p>
Voici un moyen de le comprendre:
lst = ['Hi', 'I am a copy!'] itr = iter(lst) print(next(itr)) lst[1] = 'I am _not_ a copy!' print(next(itr))
Non, ils ne le font pas. Certains types de python, par exemple Toutes ses collections, il suffit de supporter d'être itératés sur plusieurs fois. Plusieurs objets itérateurs peuvent contenir des références à la même liste, elles gèrent tout simplement leur propre position dans la liste.
remarque quelques effets: p> encore plus évident est le Cas d'itérateurs épuisables et d'appel clairement les itérateurs Share State. P> P> iTER code> sur eux: p>
iTer (objet) code> renvoie un objet itérateur em> qui est une version itératrice de l'objet donné à celui-ci étant donné qu'il implémente
__ iter __ code>.
iter (objet) code> ne crée pas une copie de l'objet.
>>> l=[[1,2],[4,5]]
>>> it=iter(l)
>>>next(it).append(3) #appending to the output of next() mutates the list l
>>> l
[[1,2,3],[4,5]]
>>> next(it).append(6)
>>> l
[[1,2,3],[4,5,6]]
>>> it=iter(l)
>>> l.pop() #Mutating the list l mutated iterator it.
[4,5,6]
>>>list(it)
[[1,2,3]]
Il renvoie un
iTER code> ator sur l'objet d'origine. Voir: en.wikipedia.org/wiki/iterator_pattern .