1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| import copy
class Foo:
def __init__(self, name):
self.name = name
def __cmp__(self, other):
return cmp(self.name, other.name)
def compare(a, b):
print 'contenu de a:', a
print 'contenu de b:', b
print 'adresses egales (b is a):', (b is a)
print 'contenus égaux (b == a):', (b == a) # les contenus
print 'par adresse (b[0] is a[0]):', (b[0] is a[0]) # contenu identique
print 'par valeur (b[0] == a[0]):', (b[0] == a[0]) # retour de __cmp__
a = Foo('a')
li = [ a ]
print 'identite'
""" dans ce cas li et li_copy reférencent la même adresse
compare doit affichier des True partout.
"""
li_copy = li
compare (li, li_copy)
print 'shallow copy'
""" dans ce cas li et li_copy ont des adresses différentes
compare doit affichier b is a = False et le reste 'True'
"""
li_copy = copy.copy(li)
compare (li, li_copy)
print 'deep copy'
""" dans ce cas li et li_copy ont des adresses différentes
et contiennent des objets differents mais égaux au sens de __cmp__
"""
li_copy = copy.deepcopy(li)
compare (li, li_copy) |
Partager