title: Why variable = object doesn't work like variable = number
body: <p>These variable assignments work as I expect:</p>
  
  <pre><code>&gt;&gt;&gt; a = 3
  &gt;&gt;&gt; b = a
  &gt;&gt;&gt; print(a, b)
  (3, 3)
  &gt;&gt;&gt; b=4
  &gt;&gt;&gt; print(a, b)
  (3, 4)
  </code></pre>
  
  <p>However, these assignments behave differently:</p>
  
  <pre><code>&gt;&gt;&gt; class number():
  ...     def __init__(self, name, number):
  ...         self.name = name
  ...         self.number = number
  ... 
  &gt;&gt;&gt; c = number("one", 1)
  &gt;&gt;&gt; d = c
  &gt;&gt;&gt; print(c.number, d.number)
  (1, 1)
  &gt;&gt;&gt; d.number = 2
  &gt;&gt;&gt; print(c.number, d.number)
  (2, 2)
  </code></pre>
  
  <p>Why is <code>c</code> is same as <code>d</code>, unlike in <code>(a, b)</code> example?  How can I do something like in <code>(a, b)</code> in <code>(c, d)</code> classes example?  That is, copy the object and then change one part of it (that won't affect the object that I borrowed properties from)?</p>