Мелкое копирование поведения итератора перечисления в питонеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Мелкое копирование поведения итератора перечисления в питоне

Сообщение Anonymous »

Я пытаюсь понять поведение итераторов в Python, особенно при использовании функций copy.copy () и copy.deepcopy () . У меня есть следующий скрипт: < /p>
import copy

my_list = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]

def iterate_5_elements(iterator):
for _ in range(5):
print(next(iterator))

my_iterator1 = enumerate(my_list)
iterate_5_elements(my_iterator1)
iterate_5_elements(my_iterator1)
print("--------------------------------")

my_iterator2 = enumerate(my_list)
iterate_5_elements(copy.copy(my_iterator2))
iterate_5_elements(copy.copy(my_iterator2))
print("--------------------------------")

my_iterator3 = enumerate(my_list)
iterate_5_elements(copy.deepcopy(my_iterator3))
iterate_5_elements(copy.deepcopy(my_iterator3))
print("--------------------------------")
< /code>
И он создает этот вывод: < /p>
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'e')
(5, 'f')
(6, 'g')
(7, 'h')
(8, 'i')
(9, 'j')
--------------------------------
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'e')
(0, 'f')
(1, 'g')
(2, 'h')
(3, 'i')
(4, 'j')
--------------------------------
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'e')
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')
(4, 'e')
--------------------------------
< /code>
Первый и третий итератор ведут себя как ожидалось. Однако, со вторым итератором (с использованием copy.copy () < /code>), вывод странный: буквы продолжаются с «f» вместо того, чтобы начинать с «a» (ожидаемое поведение, это неглубокая копия), но числа сбрасываются.
Почему это происходит? Почему алфавит продолжается с «f» после первой итерации, хотя индекс, кажется, сбрасывается? Печать от 0 до 9 и «А» через 'f'

Подробнее здесь: https://stackoverflow.com/questions/797 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»