Eine einfache Frage, vielleicht, aber ich kann meine Google-Anfrage nicht so formulieren, dass ich die Antwort hier finde. Ich habe die Angewohnheit, Kopien von Objekten zu erstellen, wenn ich sie an Objektkonstruktoren übergebe, etwa so:
...
def __init__(self, name):
self._name = name[:]
...
Wenn ich jedoch den folgenden Testcode ausführe, scheint es nicht notwendig zu sein, dass Python bei der Objektinstanziierung tiefe Kopien der Objektwerte erstellt:
>>> 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'
Worum geht es hier wirklich? Danke!
EDITAR:
Danke an @Olivier für seine tolle Antwort. Der folgende Code dokumentiert ein besseres Beispiel dafür, dass Python per Referenz kopiert:
>>> flav = ['a','b']
>>> a = Candy(flav)
>>> a.flavor
['a', 'b']
>>> flav[1] = 'c'
>>> flav
['a', 'c']
>>> a.flavor
['a', 'c']