class Cat():
def __init__(self, name: str):
self.name = name
def __repr__(self) -> str:
return self.name
= Cat(name="milo")
Milo_obj print(f"id: [{id(Milo_obj)}]")
id: [140517113061744]
Tony Phung
October 22, 2024
This post will through 3 different methods to copy a list and see the differences.
=
copy.copy()
copy.deepcopy()
High-level Steps:
Cat
Class and Objectmilo
milo
object new or copies of original milo
?milo
to Milo
milo
the Different Methodsmilo
Assignment =
results:
Others results (.copy
, .deepcopy
, :
):
listcats_copy_assn = listcats
listcats_copy_shallow = copy.copy(listcats)
listcats_copy_deep = copy.deepcopy(listcats)
listcats_copy_slice = listcats[:]
print(f"[id:{id(listcats)}] listcats_og: {listcats}")
print(f"[id:{id(listcats_copy_assn)}] listcats_cpy_assn: {listcats_copy_assn}")
print(f"[id:{id(listcats_copy_shallow)}] listcats_cpy_shallow: {listcats_copy_shallow}")
print(f"[id:{id(listcats_copy_deep)}] listcats_cpy_deep: {listcats_copy_deep}")
print(f"[id:{id(listcats_copy_slice)}] listcats_cpy_slice: {listcats_copy_slice}")
[id:140517134247168] listcats_og: ['Oreo', 'Lilo', 'Wasabi', milo]
[id:140517134247168] listcats_cpy_assn: ['Oreo', 'Lilo', 'Wasabi', milo]
[id:140517124516096] listcats_cpy_shallow: ['Oreo', 'Lilo', 'Wasabi', milo]
[id:140517110270272] listcats_cpy_deep: ['Oreo', 'Lilo', 'Wasabi', milo]
[id:140517124392064] listcats_cpy_slice: ['Oreo', 'Lilo', 'Wasabi', milo]
milo
object new or copies of original?Shallow copies keeps the same references:
id: [140517113061744]
Deep copies creates new objects: creates new id’s
print(f"[{id(listcats[3])}]-[milo id] of [listcats_og]: {listcats[3]}")
print(f"[{id(listcats_copy_assn[3])}]-[milo id] of [listcats_cpy_assn]: {listcats_copy_assn[3]}")
print(f"[{id(listcats_copy_shallow[3])}]-[milo id] of [listcats_cpy_shallow]: {listcats_copy_shallow[3]}")
print(f"[{id(listcats_copy_deep[3])}]-[milo id] of [listcats_cpy_deep]: {listcats_copy_deep[3]}")
print(f"[{id(listcats_copy_slice[3])}]-[milo id] of [listcats_cpy_slice]: {listcats_copy_slice[3]}")
[140517113061744]-[milo id] of [listcats_og]: milo
[140517113061744]-[milo id] of [listcats_cpy_assn]: milo
[140517113061744]-[milo id] of [listcats_cpy_shallow]: milo
[140517115254800]-[milo id] of [listcats_cpy_deep]: milo
[140517113061744]-[milo id] of [listcats_cpy_slice]: milo
milo
to Milo
milo
the Different MethodsAs expected:
milo
has not updated (since its a new object, i.e. new object id: 140517115254800
)milo
since references are maintained, rather than creating new objects (i.e. same object id: 140517113061744
)print(f"[{id(listcats[3])}]-[milo id] of [listcats_og]: {listcats[3]}")
print(f"[{id(listcats_copy_assn[3])}]-[milo id] of [listcats_cpy_assn]: {listcats_copy_assn[3]}")
print(f"[{id(listcats_copy_shallow[3])}]-[milo id] of [listcats_cpy_shallow]: {listcats_copy_shallow[3]}")
print(f"[{id(listcats_copy_deep[3])}]-[milo id] of [listcats_cpy_deep]: {listcats_copy_deep[3]}")
print(f"[{id(listcats_copy_slice[3])}]-[milo id] of [listcats_cpy_slice]: {listcats_copy_slice[3]}")
[140517113061744]-[milo id] of [listcats_og]: Milo
[140517113061744]-[milo id] of [listcats_cpy_assn]: Milo
[140517113061744]-[milo id] of [listcats_cpy_shallow]: Milo
[140517115254800]-[milo id] of [listcats_cpy_deep]: milo
[140517113061744]-[milo id] of [listcats_cpy_slice]: Milo