Each value in Python has an associated numeric address associated to it.
We can probe for it:

      https://docs.python.org/3/library/functions.html#id

For example:

#########################
>>> x = [1, 2, 3]
>>> y = x[:]
>>> id(x)
139718082542336
>>> id(y)
139718082556776
#########################

Here, we create a list and point the name 'x' to it.  We point another
name, 'y', to a slice of the first list.  Slicing creates a new list.

Let's make one more name:

#########################
>>> z = x
>>> id(z)
139718082542336
#########################

Note that the numeric id() that we get from 'z' is the same number as the
id() we get from 'x'.  These indicate that both names are referring to the
identical list value.


Identity matters because some values can be changed, or mutated.  It means
that two values can start looking the same, like the two lists that we
created:

#########################
>>> x
[1, 2, 3]
>>> y
[1, 2, 3]
#########################

but after a mutation:

##########################
>>> x.append('four')
>>> x
[1, 2, 3, 'four']
>>> y
[1, 2, 3]
##########################

we can see that they are now different.


If we try using 'z', we see:

##########################
>>> z
[1, 2, 3, 'four']
##########################


and that squares with what we said earlier: we gave the list we see here
two names: 'x' and 'z'.  But it's the same list.


To come to your example, to get an intuition of what's happening, try
applying id() on individual elements of the list, to probe which ones are
unique and which ones are the same.  You can also use a graphical tool like
pythontutor.com.  Take a look:  https://goo.gl/HBLTw9


A slight revision to the scenario might make things a little clearer.  Try:

##########################
nested_lists = [['a'], ['b']] * 2
first_element = nested_lists[0]
second_element = nested_lists[1]

first_element.append('c')
second_element.append('d')
##########################

Visualization: https://goo.gl/k4TLvi


See if the graphical view squares away with your internal mental model.
Please feel free to ask questions.
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to