[Python-checkins] cpython (3.2): Issue #16225: Add additional note to tutorial about changing sequence while

chris.jerdonek python-checkins at python.org
Tue Oct 16 04:51:36 CEST 2012


http://hg.python.org/cpython/rev/1f1bf6a3abbc
changeset:   79727:1f1bf6a3abbc
branch:      3.2
parent:      79709:ed6da2a8361c
user:        Chris Jerdonek <chris.jerdonek at gmail.com>
date:        Mon Oct 15 19:44:47 2012 -0700
summary:
  Issue #16225: Add additional note to tutorial about changing sequence while looping.

files:
  Doc/tutorial/controlflow.rst    |  22 ++++++++++----------
  Doc/tutorial/datastructures.rst |  13 ++++++++++++
  2 files changed, 24 insertions(+), 11 deletions(-)


diff --git a/Doc/tutorial/controlflow.rst b/Doc/tutorial/controlflow.rst
--- a/Doc/tutorial/controlflow.rst
+++ b/Doc/tutorial/controlflow.rst
@@ -58,24 +58,24 @@
 ::
 
    >>> # Measure some strings:
-   ... a = ['cat', 'window', 'defenestrate']
-   >>> for x in a:
-   ...     print(x, len(x))
+   ... words = ['cat', 'window', 'defenestrate']
+   >>> for w in words:
+   ...     print(w, len(w))
    ...
    cat 3
    window 6
    defenestrate 12
 
-It is not safe to modify the sequence being iterated over in the loop (this can
-only happen for mutable sequence types, such as lists).  If you need to modify
-the list you are iterating over (for example, to duplicate selected items) you
-must iterate over a copy.  The slice notation makes this particularly
-convenient::
+If you need to modify the sequence you are iterating over while inside the loop
+(for example to duplicate selected items), it is recommended that you first
+make a copy.  Iterating over a sequence does not implicitly make a copy.  The
+slice notation makes this especially convenient::
 
-   >>> for x in a[:]: # make a slice copy of the entire list
-   ...    if len(x) > 6: a.insert(0, x)
+   >>> for w in words[:]:  # Loop over a slice copy of the entire list.
+   ...     if len(w) > 6:
+   ...         words.insert(0, w)
    ...
-   >>> a
+   >>> words
    ['defenestrate', 'cat', 'window', 'defenestrate']
 
 
diff --git a/Doc/tutorial/datastructures.rst b/Doc/tutorial/datastructures.rst
--- a/Doc/tutorial/datastructures.rst
+++ b/Doc/tutorial/datastructures.rst
@@ -584,6 +584,19 @@
    orange
    pear
 
+To change a sequence you are iterating over while inside the loop (for
+example to duplicate certain items), it is recommended that you first make
+a copy.  Looping over a sequence does not implicitly make a copy.  The slice
+notation makes this especially convenient::
+
+   >>> words = ['cat', 'window', 'defenestrate']
+   >>> for w in words[:]:  # Loop over a slice copy of the entire list.
+   ...     if len(w) > 6:
+   ...         words.insert(0, w)
+   ...
+   >>> words
+   ['defenestrate', 'cat', 'window', 'defenestrate']
+
 
 .. _tut-conditions:
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list