[merge from 3.5] - Issue27203 - Fix doctests Doc/faq/programming.rst.

Patch contributed by Jelle Zijlstra.
This commit is contained in:
Senthil Kumaran 2016-06-04 20:08:10 -07:00
commit 2950776d36
1 changed files with 20 additions and 8 deletions

View File

@ -1172,16 +1172,28 @@ You probably tried to make a multidimensional array like this::
>>> A = [[None] * 2] * 3
This looks correct if you print it::
This looks correct if you print it:
.. testsetup::
A = [[None] * 2] * 3
.. doctest::
>>> A
[[None, None], [None, None], [None, None]]
But when you assign a value, it shows up in multiple places:
>>> A[0][0] = 5
>>> A
[[5, None], [5, None], [5, None]]
.. testsetup::
A = [[None] * 2] * 3
.. doctest::
>>> A[0][0] = 5
>>> A
[[5, None], [5, None], [5, None]]
The reason is that replicating a list with ``*`` doesn't create copies, it only
creates references to the existing objects. The ``*3`` creates a list
@ -1665,9 +1677,9 @@ address, it happens frequently that after an object is deleted from memory, the
next freshly created object is allocated at the same position in memory. This
is illustrated by this example:
>>> id(1000)
>>> id(1000) # doctest: +SKIP
13901272
>>> id(2000)
>>> id(2000) # doctest: +SKIP
13901272
The two ids belong to different integer objects that are created before, and
@ -1676,9 +1688,9 @@ objects whose id you want to examine are still alive, create another reference
to the object:
>>> a = 1000; b = 2000
>>> id(a)
>>> id(a) # doctest: +SKIP
13901272
>>> id(b)
>>> id(b) # doctest: +SKIP
13891296