Manipulations sur les ensembles

par Joseph Razik, le 2019-10-18
ensembles

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)
['1111', '2222', '2222']
In [3]:
# on défini un ensemble à partir de cette liste
s = set(l)
print(s)
{'1111', '2222'}
In [4]:
# les chaines de caractères identiques ont la même référence
print(id(a))
print(id(b))
print(id(c))
140298395278672
140298395278784
140298395278784
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)
140298395278896
['1111', '2222', '2222', '3333']
{'3333', '1111', '2222'}
In [6]:
# on réaffecte la valeur de d
d = c
print(id(d), d)
print(id(c), c)
140298395278784 2222
140298395278784 2222
In [7]:
print(s)
{'3333', '1111', '2222'}
In [8]:
print(l)
['1111', '2222', '2222', '3333']

"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)
Erreur:  name 'd' is not defined
In [10]:
print(s)
print(l)
{'3333', '1111', '2222'}
['1111', '2222', '2222', '3333']

La valeur existe toujours

In [11]:
id(l[3])
Out[11]:
140298395278896
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)
140298285739424 <__main__.A object at 0x7f99bd7beda0> 1
140298285739480 <__main__.A object at 0x7f99bd7bedd8> 2
140298285739592 <__main__.A object at 0x7f99bd7bee48> 1
In [16]:
lo = [a, b, c]
print(lo)
[<__main__.A object at 0x7f99bd7beda0>, <__main__.A object at 0x7f99bd7bedd8>, <__main__.A object at 0x7f99bd7bee48>]
In [17]:
so = set(lo)
In [18]:
print(so)
{<__main__.A object at 0x7f99bd7beda0>, <__main__.A object at 0x7f99bd7bee48>, <__main__.A object at 0x7f99bd7bedd8>}
In [19]:
d = c
print(id(d), d)
140298285739592 <__main__.A object at 0x7f99bd7bee48>
In [20]:
so.add(d)
print(so)
{<__main__.A object at 0x7f99bd7beda0>, <__main__.A object at 0x7f99bd7bee48>, <__main__.A object at 0x7f99bd7bedd8>}
In [21]:
del d
print(so)
{<__main__.A object at 0x7f99bd7beda0>, <__main__.A object at 0x7f99bd7bee48>, <__main__.A object at 0x7f99bd7bedd8>}