161 votes

Différence entre les dict.clear() et l'attribution {} en Python

En python, est-il une différence entre un appel clear() et en attribuant {} d'un dictionnaire? Si oui, quel est-il? Exemple:

d = {"stuff":"things"}
d.clear()   #this way
d = {}      #vs this way

274voto

Greg Hewgill Points 356191

Si vous avez une autre variable se référant également à la même dictionnaire, il y a une grande différence:

>>> d = {"stuff": "things"}
>>> d2 = d
>>> d = {}
>>> d2
{'stuff': 'things'}
>>> d = {"stuff": "things"}
>>> d2 = d
>>> d.clear()
>>> d2
{}

C'est parce que l'attribution d = {} crée un nouveau dictionnaire vide et l'attribue à l' d variable. Cela laisse d2 pointant vers le vieux dictionnaire avec des articles toujours en elle. Toutefois, d.clear() efface le même dictionnaire que d et d2 à la fois point.

29voto

Michel Points 992

d = {} permettra de créer une nouvelle instance pour les d mais toutes les autres références pointent toujours vers l'ancien contenu. .clear() réinitialise le contenu, mais toutes les références à la même instance sera toujours correct.

21voto

odano Points 61

En outre, les différences mentionnées dans d'autres réponses, il y a également une différence de vitesse. d = {} est plus de deux fois plus vite:

python -m timeit -s "d = {}" "for i in xrange(500000): d.clear()"
10 loops, best of 3: 127 msec per loop

python -m timeit -s "d = {}" "for i in xrange(500000): d = {}"
10 loops, best of 3: 53.6 msec per loop

7voto

lastland Points 189

En plus de @odano 's réponse, il semble à l'aide de d.clear() est plus rapide si vous souhaitez effacer le dict de nombreuses fois.

import timeit

p1 = ''' 
d = {}
for i in xrange(1000):
    d[i] = i * i
for j in xrange(100):
    d = {}
    for i in xrange(1000):
        d[i] = i * i
'''

p2 = ''' 
d = {}
for i in xrange(1000):
    d[i] = i * i
for j in xrange(100):
    d.clear()
    for i in xrange(1000):
        d[i] = i * i
'''

print timeit.timeit(p1, number=1000)
print timeit.timeit(p2, number=1000)

Le résultat est:

20.0367929935
19.6444659233

7voto

maxp Points 1852

Comme une illustration pour les choses déjà dit avant:

>>> a = {1:2}
>>> id(a)
3073677212L
>>> a.clear()
>>> id(a)
3073677212L
>>> a = {}
>>> id(a)
3073675716L

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X