 <p>It's not that you can't access "primitive values" by reference. The problem is that some data types in Python are mutable (lists, dictionaries) while others are immutable (integers, strings, tuples). Whenever you try to modify an immutable object, you always get back a new object with the new value. The original object remains untouched. So...</p> <pre><code>a = 3 # create a new object with the value 3 and bind it to the variable 'a' b = a # bind the variable 'b' to the same object as 'a' </code></pre> <p>Here both 'a' and 'b' are referencing the same object at the same location in memory. However, because the object is immutable, modifying 'b' does not have the "expected" result...</p> <pre><code>b = 4 print a # displays "3" </code></pre> <p>Those of us coming from C/C++ aren't used to "immutable objects". In C, you would expect "b = 4" to modify the "object" b is pointing to, setting its value to 4. In Python, this isn't the case. "b = 4" creates a new object whose value is 4 and modifies b so that it points to this new object.</p>