Jakoś po zrobieniu tegoBardzo dziwne zachowanie pętli: lista zmienia tożsamość. Co się dzieje?
list2 = [x for x in range(10)]
list1 = [ x for x in range(10,20)]
for k, list1 in enumerate([list1,list2]):
for number, entry in enumerate(list1):
print number, entry
nagle id(list2)==id(list1)
oceniona prawda? Co się dzieje na ziemi? podczas gdy pętla jest uruchomiony to nie wydaje się, aby pszczoły sprawę pierwsze wyjście jest zgodnie z oczekiwaniami:
0 10, 1 11, 2 12, ... 0 0 1 2 2 3 ...
drugi choć daje:
0 0 1 1 2 2 ...
Jak to możliwe?
Wystarczy zmiany kodu do:
list2 = [x for x in range(10)]
list1 = [ x for x in range(10,20)]
pozbywa się tego zachowania.
for k, NEWVAR in enumerate([list1,list2]):
for number, entry in enumerate(list1):
print number, entry
ale powinny pętla nie utworzyć nową zmienną w namescope pętli? – pindakaas
dobrze, co do diabła, to nie jest szalone – pindakaas
@pindakaas: nie, zmienna nie jest ograniczona do zakresu pętli for. zobacz http://stackoverflow.com/questions/3611760/scoping-in-python-for-loops – Railslide