title: Can't understand python shallow copy when working with int and str
body: <p>Python doc about copy</p>
  <blockquote>
  <p>The difference between shallow and deep copying is only relevant for compound objects (objects that contain other objects, like lists or class instances):</p>
  <p>A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.
  A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.</p>
  </blockquote>
  <p>I think shallow copy should copy the reference of the list, so update the shallow_copy_list should also change the original list, but the first example doesn't work as expected.</p>
  <p>Python 3.6.0 (default, Dec 24 2016, 08:01:42) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin</p>
  <pre><code>items = [1, 2, 3, 4, 5, 6]
  items_copy = items[:]
  items_copy[0] = 'a'
  items_copy == items
  False
  </code></pre>
  <p>I think this is a shallow copy, and items_copy == items should return True but it's False.
  But another example return True</p>
  <pre><code>items = [{'id': 1, 'name': 'laptop', 'value': 1000}, {'id': 2, 'name': 'chair', 'value': 300},]
  items_copy = items[:]
  items_copy[0]['id'] = 'a'
  items_copy == items
  True
  </code></pre>
  <p>References:</p>
  <p><a href="https://stackoverflow.com/questions/26958168/python-shallow-and-deep-copies">Python Shallow and deep copies</a></p>
  <p><a href="https://www.youtube.com/watch?v=_AEJHKGk9ns" rel="nofollow noreferrer">Ned Batchelder - Facts and Myths about Python names and values - PyCon 2015</a></p>