Manipulation sur les ensembles et les références¶
In [1]:
# on créé 3 variables chaines de caractères
a = "1111"
b = "2222"
c = "2222"
In [2]:
# on défini une liste avec ces éléments
l = [a, b, c]
print(l)
In [3]:
# on défini un ensemble à partir de cette liste
s = set(l)
print(s)
In [4]:
# les chaines de caractères identiques ont la même référence
print(id(a))
print(id(b))
print(id(c))
In [5]:
# définition d'un nouvel élément
d = "3333"
print(id(d))
# ajout à la liste
l.append(d)
print(l)
# ajout à l'ensemble
s.add(d)
print(s)
In [6]:
# on réaffecte la valeur de d
d = c
print(id(d), d)
print(id(c), c)
In [7]:
print(s)
In [8]:
print(l)
"l'ancien" d existe encore dans l'ensemble et dans la liste bien qu'il est changé de valeur entre temps
In [9]:
# on libère (efface) la variable d
del d
try:
print(id(d), d)
except NameError as e:
print('Erreur: ', e)
In [10]:
print(s)
print(l)
La valeur existe toujours
In [11]:
id(l[3])
Out[11]:
In [12]:
%load_ext tutormagic
In [13]:
%%tutor
a = "1111"
b = "2222"
c = "2222"
l = [a, b, c]
s = set(l)
d = "3333"
l.append(d)
s.add(d)
d = c
del d
Maintenant avec des objets¶
In [14]:
class A:
def __init__(self, pa):
self.a = pa
In [15]:
a = A(1)
b = A(2)
c = A(1)
print(id(a), a, a.a)
print(id(b), b, b.a)
print(id(c), c, c.a)
In [16]:
lo = [a, b, c]
print(lo)
In [17]:
so = set(lo)
In [18]:
print(so)
In [19]:
d = c
print(id(d), d)
In [20]:
so.add(d)
print(so)
In [21]:
del d
print(so)