Простой вопрос, возможно, но я не могу полностью рассказать о своем запросе Google, чтобы найти ответ здесь. У меня была привычка делать копии объектов, когда я передаю их в конструкторы объектов, например:
...
def __init__(self, name):
self._name = name[:]
...
Однако, когда я запускал следующий тестовый код, кажется, не нужно, что Python делает глубокие копии значений объекта при создании объекта:
>>> class Candy(object):
... def __init__(self, flavor):
... self.flavor = flavor
...
>>> flav = "cherry"
>>> a = Candy(flav)
>>> a
<__main__.Candy object at 0x00CA4670>
>>> a.flavor
'cherry'
>>> flav += ' and grape'
>>> flav
'cherry and grape'
>>> a.flavor
'cherry'
Итак, что это за настоящая история? Спасибо!
EDIT:
Спасибо @Olivier за его отличный ответ. Следующий код документирует лучший пример, который Python копирует по ссылке:
>>> flav = ['a','b']
>>> a = Candy(flav)
>>> a.flavor
['a', 'b']
>>> flav[1] = 'c'
>>> flav
['a', 'c']
>>> a.flavor
['a', 'c']