Differences between revisions 3 and 4
Revision 3 as of 2023-04-11 15:45:05
Size: 1096
Comment:
Revision 4 as of 2023-06-15 20:22:30
Size: 1660
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
'''`copy`''' is a module for deep- and shallow-copying operations. '''`copy`''' is a module for deep- and shallow-copying operations. This is useful for any objects that are passed by reference, especially lists.
Line 6: Line 6:

----



== Example ==

{{{
import copy

class foo(object):
    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        return self.name == other.name

a = foo("foo")
lista = [a]
listb = lista

lista[0] == listb[0] # True
lista[0] is listb[0] # True

listc = copy.deepcopy(lista)

lista[0] == listc[0] # True
lista[0] is listc[0] # False
}}}
Line 49: Line 78:
[[https://pymotw.com/3/copy/|Python Module of the Week article for copy]]

Python Copy

copy is a module for deep- and shallow-copying operations. This is useful for any objects that are passed by reference, especially lists.


Example

import copy

class foo(object):
    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        return self.name == other.name

a = foo("foo")
lista = [a]
listb = lista

lista[0] == listb[0]  # True
lista[0] is listb[0]  # True

listc = copy.deepcopy(lista)

lista[0] == listc[0]  # True
lista[0] is listc[0]  # False


Concept

A deep copy differs from a shallow copy only for containers. A shallow copy contains references to the same objects that the original contains. A deep copy contains copies of the original's contents.

This poses two challenges:

  1. Recursive objects may contain a reference to themselves, and causing a recursion loop
  2. Some data should be copied once and shared among the contents

Creating a deep copy then involves:

  1. Allowing objects to override the operation to avoid loops; see __deepcopy__ for details

  2. Keeping a memo dictionary for data already copied, so that it can be shared among the contents


Usage

Copy

Make a shallow copy of an object.

DeepCopy

Make a deep copy of an object.


See also

Python copy module documentation

Python Module of the Week article for copy


CategoryRicottone

Python/Copy (last edited 2023-10-10 20:43:25 by DominicRicottone)