Использование модуля копирования (просто создание новой переменной) в Python? - PullRequest
0 голосов
/ 04 июля 2018

Скажем, у меня был такой код:

class Animals:
    def __init__(self):
        print('Woah')
    def Eat(self):
        print('yum')

А потом ты сделал животных Гилберто: gilberto = Животные ()

А потом вы захотели сделать еще одно животное по имени Илия. Зачем вам использовать модуль копирования:

elijah = copy.copy(gilberto)

Когда вы могли бы просто сделать:

elijah = gilberto

Есть ли что-нибудь особенное в модуле копирования? В случае с классом животных это выглядит так же.

1 Ответ

0 голосов
/ 04 июля 2018

При использовании 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...