class Cat():
def __init__(self, name: str):
self.name = name
def __repr__(self) -> str:
return self.name
Milo_obj = Cat(name="milo")
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 Objectmilomilo object new or copies of original milo?milo to Milomilo the Different MethodsmiloAssignment = 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 Milomilo 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