Por que variável = objeto não funciona como variável = número

Essas atribuições de variáveis funcionam como eu esperava:

>>> a = 3
>>> b = a
>>> print(a, b)
(3, 3)
>>> b=4
>>> print(a, b)
(3, 4)

No entanto, essas atribuições se comportam de maneira diferente:

>>> class number():
...     def __init__(self, name, number):
...         self.name = name
...         self.number = number
... 
>>> c = number("one", 1)
>>> d = c
>>> print(c.number, d.number)
(1, 1)
>>> d.number = 2
>>> print(c.number, d.number)
(2, 2)

Porque éc é o mesmo quedao contrário de(a, b) exemplo? Como posso fazer algo como em(a, b) no(c, d) exemplo de classes? Ou seja, copie o objeto e altere uma parte dele (que não afetará o objeto do qual eu emprestei propriedades)?

questionAnswers(10)

yourAnswerToTheQuestion