import copy import pickle if 'next' not in vars(__builtins__): def next(iterator): # Python 2.5 compatibility return iterator.next() def make_generator(): for i in range(4): yield i def test_pickle_unpickle_live_generator(): live_generator = make_generator() assert next(live_generator) == 0 assert next(live_generator) == 1 live_generator_pickled = pickle.dumps(live_generator) live_generator_unpickled = pickle.loads(live_generator_pickled) assert list(live_generator_unpickled) == [2, 3] assert list(live_generator_unpickled) == [] assert list(live_generator) == [2, 3] assert list(live_generator) == [] def test_deepcopy_live_generator(): live_generator = make_generator() assert next(live_generator) == 0 assert next(live_generator) == 1 live_generator_deepcopied = copy.deepcopy(live_generator) assert list(live_generator_deepcopied) == [2, 3] assert list(live_generator_deepcopied) == [] assert list(live_generator) == [2, 3] assert list(live_generator) == [] if __name__ == '__main__': test_deepcopy_live_generator() test_pickle_unpickle_live_generator()