diff --git a/Lib/test/test_turtle.py b/Lib/test/test_turtle.py index 12d2eed874148c..dd66ed63049575 100644 --- a/Lib/test/test_turtle.py +++ b/Lib/test/test_turtle.py @@ -671,6 +671,21 @@ def test_dot_signature(self): self.assertRaises(turtle.TurtleGraphicsError, self.turtle.dot, 0, (0, 257, 0)) self.assertRaises(turtle.TurtleGraphicsError, self.turtle.dot, 0, 0, 257, 0) + def test_clone_clear_does_not_delete_source_items(self): + screen = self.turtle.screen + screen._delete.reset_mock() + screen._createline.side_effect = lambda: object() + + self.turtle.circle(20) + clone = self.turtle.clone() + source_items = set(self.turtle.items) + + clone.forward(50) + clone.clear() + + deleted_items = {call.args[0] for call in screen._delete.call_args_list} + self.assertFalse(source_items & deleted_items) + class TestModuleLevel(unittest.TestCase): def test_all_signatures(self): import inspect diff --git a/Lib/turtle.py b/Lib/turtle.py index b52d681b3af1c3..768f114755e2b7 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -2879,6 +2879,8 @@ def clone(self): q.turtle._item = [screen._createpoly() for item in screen._shapes[self.turtle.shapeIndex]._data] q.currentLineItem = screen._createline() + q.currentLine = [q._position] if q._drawing else [] + q.items = [q.currentLineItem] q._update() return q diff --git a/Misc/ACKS b/Misc/ACKS index e38bda37bfa92d..9565602c2a6171 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1582,6 +1582,7 @@ Sean Reifschneider Michael P. Reilly Bernhard Reiter Steven Reiz +Yuxing Ren Roeland Rengelink Antoine Reversat Flávio Ribeiro