Я пытаюсь понять поведение итераторов в 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
Мелкое копирование поведения итератора перечисления в питоне ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как понять «постоянство мелкое» в отношении ссылок (как указано в cppreference.com)?
Anonymous » » в форуме C++ - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-