[PYTHON] Was ist copy.copy ()

https://docs.python.jp/3/library/copy.html

Gibt eine flache Kopie von x zurück.

Es gibt kein "Wie". Mit anderen Worten, die Spezifikationen sind nicht wirklich geschrieben.

Spezielle Methoden __copy__ () und __deepcopy__ () können definiert werden, um eine klassenspezifische Kopierimplementierung zu definieren.

Gibt es diese Methode in der Liste?

>>> lst = [1, 2, 3]
>>> lst.__copy__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute '__copy__'

Das gibt es nicht.

Unten finden Sie die Implementierung von copy.copy () in Python 3.6.1.

def copy(x):
    """Shallow copy operation on arbitrary Python objects.

    See the module's __doc__ string for more info.
    """

    cls = type(x)

    copier = _copy_dispatch.get(cls)
    if copier:
        return copier(x)

    try:
        issc = issubclass(cls, type)
    except TypeError: # cls is not a class
        issc = False
    if issc:
        # treat it as a regular class:
        return _copy_immutable(x)

    copier = getattr(cls, "__copy__", None)
    if copier:
        return copier(x)

    reductor = dispatch_table.get(cls)
    if reductor:
        rv = reductor(x)
    else:
        reductor = getattr(x, "__reduce_ex__", None)
        if reductor:
            rv = reductor(4)
        else:
            reductor = getattr(x, "__reduce__", None)
            if reductor:
                rv = reductor()
            else:
                raise Error("un(shallow)copyable object of type %s" % cls)

    if isinstance(rv, str):
        return x
    return _reconstruct(x, None, *rv)


_copy_dispatch = d = {}

def _copy_immutable(x):
    return x
for t in (type(None), int, float, bool, complex, str, tuple,
          bytes, frozenset, type, range, slice,
          types.BuiltinFunctionType, type(Ellipsis), type(NotImplemented),
          types.FunctionType, weakref.ref):
    d[t] = _copy_immutable
t = getattr(types, "CodeType", None)
if t is not None:
    d[t] = _copy_immutable

d[list] = list.copy
d[dict] = dict.copy
d[set] = set.copy
d[bytearray] = bytearray.copy

...

copy.copy () enthält eine Funktion im Wörterbuch, die im Voraus eine flache Kopie (und eine tiefe Kopie) in jedem integrierten Datentyp realisiert. Wenn sie nicht in diesem Wörterbuch registriert ist, wird die Methode__copy__ ()verwendet Suchen.

Danach scheint es sich basierend auf den Konventionen zu verhalten, die sich auf das "pickle" -Modul beziehen, aber es wird weggelassen, weil es die Annahmen dieses Artikels überschreitet. Entspricht dem folgenden Teil des Dokuments:

Klassen können dieselbe Schnittstelle verwenden, über die Pickle gesteuert wird, um das Kopieren zu steuern. Informationen zu diesen Methoden finden Sie in der Beschreibung des Modul-Pickles. Tatsächlich verwendet das Kopiermodul die vom Kopierregulierungsmodul registrierte Picle-Funktion.

Abgesehen davon betrachtet der Quellcode "copy.copy (lst)" als äquivalent zu "lst.copy ()".

Übrigens gibt es in Python 2 keine "list.copy ()", und stattdessen wird "lst [:]" verwendet. Möglicherweise wird "lst [:]" relativ häufig in älteren Dokumenten angezeigt, die von 2 auf 3 migriert wurden.

Recommended Posts

Was ist copy.copy ()
Was ist ein Namespace?
Was ist Django? .. ..
Was ist dotenv?
Was ist POSIX?
Was ist Linux?
Was ist klass?
Was ist SALOME?
Was ist Linux?
Was ist Python?
Was ist Hyperopt?
Was ist Linux?
Was ist Pyvenv?
Was ist __call__?
Was ist Linux?
Was ist Python?
Was ist Raspberry Pi?
[Python] Was ist Pipeline ...
Was ist das Calmar-Verhältnis?
Was ist ein Terminal?
[PyTorch Tutorial ①] Was ist PyTorch?
Was ist Hyperparameter-Tuning?
Was ist ein Hacker?
Was ist JSON? .. [Hinweis]
Wofür ist Linux?
Was ist ein Zeiger?
Was ist Ensemble-Lernen?
Was ist TCP / IP?
Was ist Pythons __init__.py?
Was ist ein Iterator?
Was ist UNIT-V Linux?
[Python] Was ist virtualenv?
Was ist maschinelles Lernen?
Was ist Mini Sam oder Mini Max?
Was ist eine logistische Regressionsanalyse?
Was ist die Aktivierungsfunktion?
Was ist eine Instanzvariable?
Was ist ein Entscheidungsbaum?
Was ist ein Kontextwechsel?
Was ist Google Cloud Dataflow?
[DL] Was ist Gewichtsverlust?
[Python] Python und Sicherheit - is Was ist Python?
Was ist ein Superuser?
Wettbewerbsprogrammierung ist was (Bonus)
[Python] * args ** Was ist kwrgs?
Was ist ein Systemaufruf?
[Definition] Was ist ein Framework?
Was ist die Schnittstelle für ...
Was ist Project Euler 3-Beschleunigung?
Was ist eine Rückruffunktion?
Was ist die Rückruffunktion?
Was ist Ihr "Tanimoto-Koeffizient"?
Python-Grundkurs (1 Was ist Python?)
[Python] Was ist eine Zip-Funktion?
[Python] Was ist eine with-Anweisung?
Was ist Kennzeichnung in der Finanzprognose?
Was ist eine reduzierte Rangkammregression?
Was ist Azure Automation Update Management?