При использовании copy.copy
вы создаете новый объект вместо ссылки на тот же объект (что вы и делаете в последнем фрагменте).
Учтите это:
Настройка
import copy
class Animals:
def __init__(self):
print('Woah')
def Eat(self):
print('yum')
gilberto = Animals()
elijah_copy = copy.copy(gilberto)
elijah_reference = gilberto
В переводчике
>>> id(gilberto) == id(elijah_copy) # Different objects!
False
>>> id(gilberto) == id(elijah_reference) # It's the same object!
True
Так что, если бы я, например, определил новый атрибут в elijah_reference
, он был бы доступен и в gilberto
, но не в elijah_copy
:
elijah_reference.color = 'red'
В переводчике
>>> gilberto.color
'red'
>>> elijah_copy.color
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Animals' object has no attribute 'color'